modular web browser

Good stuff. You may want to consider using CGI as your interface
to protocol handlers. It covers all the information you need in
environment variables and has ways to handle POST data and the like.

You may say "But CGI is for servers". Yes, it is, but you can look
at those external protocol handlers as servers. You could handle
unknown protocols by connecting to an HTTP server and giving it
the full URL and have it gateway for you. That's done all the
time by proxy servers. What you've done is cut out the HTTP middleman
and directly run the gateway. With the HTTP server out of the way,
CGI logically follows as the interface. Well, it _does_ make sense,
I may just not be explaining it well.