I think you're misunderstanding my proposed architecture; there's a daemon on the computer with the keyboard that decides which application should see a key press event when the user presses a key on that keyboard. That daemon may also provide keystroke events when the user interacts with an on-screen picture of a keyboard and omit keystrokes that have been configured to control the mouse pointer. For some touchpads, the daemon would map between what the hardware outputs (two fingers moving in a particular way) and what that gesture means (scroll up), so the touchpad behavior is consistent across applications.
If the application is remote, the devices it has opened on the machine it is running on simply proxy the devices that an application on the machine with the hardware would have opened; all of the "what does this particular output from this particular hardware" is dealt with on the machine with that hardware.
I think, in fact, that we agree on what should be done where, but the terms "client" and "server" are somewhat unclear in the context of online gaming in X; the "client" is the application, but there are things called "servers" both closer to the user and further away from the user, and all three programs depend on operating system services.