Non capisco quale sia il motivo.
E' spiegato nella documentazione della funzione SetWindowsHookEx:

The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread. All global hook functions must be in libraries.