Put what keyboard engine currently does aside, just simply imagine what should be done.
So basically two way I would imagine:
1. send key sym to client. This is what I hope it can be done, but not currently possible for all client on wayland
2. use commit_string, reliable, but not simulate key sequence.
3. Or, make forwardKeyDelegate key to generate key sequence that should produce the given xkb state. instead of generate just press, if modifier is not empty.
You may want to add a check to only apply such logic if key is from virtual keyboard (isVirtual()).