As for making the modifier keys work on normal letter keys, that's something I can't tell you.
I did puruse the xkb protocol specification a little and didn't find anything that would point to the conclusion that it isn't possible.
I'm guessing you've already tried using xev to try and diagnose the problem, but in case you haven't. Using those letter-modifiers does report something interesting:
KeyPress event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10503788, (363,665), root:(364,690),
state 0x30, keycode 41 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10503828, (363,665), root:(364,690),
state 0x30, keycode 41 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10503828, (363,665), root:(364,690),
state 0x30, keycode 41 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10503868, (363,665), root:(364,690),
state 0x30, keycode 41 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10503868, (363,665), root:(364,690),
state 0x30, keycode 41 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10503872, (363,665), root:(364,690),
state 0x30, keycode 41 (keysym 0xffe3, Control_L), same_screen YES,
XKeysymToKeycode returns keycode: 37
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 32, synthetic NO, window 0x2600001,
root 0x150, subw 0x0, time 10504600, (363,665), root:(364,690),
state 0x30, keycode 66 (keysym 0xfe13, ISO_Level5_Lock), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Note how close the time of the events are. The modifiers are being "pressed" and "released" rapidly just as you would normally expect from letter keys when they are held down. You probably need to condionally control their repeat rate or somehow change them to act more like modifiers. I'm really not sure if it can be done, but the answer probably lies deep in the xkb and x window protocol specifications.