NetHack and its variants communicate with the user via windowing interfaces. These are designed to be modular so that different windowing interfaces can be included when building the game. This flexibility is required both because windowing interfaces are typically much less portable than the game (and thus will not normally support every platform that the games does) and because users have varying preferences as to the style of interface they prefer.
NetHack Proxy takes this abstraction one stage further by allowing the game and the windowing interface to run in separate processes and even on separate computers.