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.