I'll try to explain the implementation; as to the why it works, I'm not a LabView expert so that's beyond me at this point. A top-level VI calls my GUI vi to initialize it during which the GUI programatically starts and loads into subpanels other VIs which run on different threads. The GUI finishes the initialization state and stops but the front panel is not closed. At this point, the GUI VI front panel is displayed and shows the sub VIs running in the panels but itself not actually running.
I have a manager vi, also initialized by the top-level VI mentioned above, that is running an event loop to capture hardware keypress events; it composes an operation from each event and calls the GUI VI with the new operation. The GUI VI then can process the operation as needed and perform some work like navigating the subpanel VIs or opening an "editor" (this editor is where I need the text selection). This is for an embedded system and there is no input that does not come through the manager VI's event loop.
-Mike