Eu descobri os dois comandos necessários para fazer isso de forma programática:
XChangeKeyboardMapping (para mapear um código não utilizado para char / unicode)
XTestFakeKeyEvent (para enviá-lo para o servidor X)
Portanto, qualquer caractere pode ser enviado e o layout do teclado pode permanecer o mesmo.