How to switch keyboard layout for external keyboard
There is hope.

I coded a proof-of-concept app that does exactly this (and using it as my everyday keyboard).

Starting from cupcake, the system has a InputMethodService that allows to override keypresses on the fly. This allows applications to change keycodes on the fly without requiring root.

The source-code is available here (for the most curious only)