Interhack is really just a filter. It reads from stdin and a socket, and when input arrives, Interhack mangles it and sends it where it needs to go. See Interhack 0.0 for a minimalist implementation of Interhack (70 lines).
You can also read some specific information about the different Interhack versions.
Interhack is written in object-oriented Perl, using Moose and as much of the CPAN as we can leverage.
Plugins are implemented by 'wrapping' Interhack methods (such as toscreen and read_keyboard), a concept from CLOS. This means the Interhack core need not know anything about plugins (except how to load them). It also leads to very modular plugins (see Interhack 1.0 for a good example of poorly-designed plugins).
See the Foodless plugin for the implementation of a typical plugin.
Getting involved is easy. Just send us a pull request!