Tough call. It needs to intercept all sorts of keystrokes before they're interpreted by the system/environment.
For text-editing shortcuts, there's stuff like shortcutfoo.com, but thats won't help you with stuff like function keys, that's likely to be intercepted by the window manager or other environment component earlier.
I think I've seen an option to configure GNU Typist that way, but I'm not really sure. That's a text-mode application in the first place; in GUI, it'd have to use SDL or other [game] library/engine/whatever—with a low-level input support.
Of course, if you have fully configurable firmware, then you can create a practice profile with dummy symbols/layers for practice. Perhaps that would be possible even with low-level remapping software.