The obvious solution is just to pop the embedded objects on the hard drive and access them with the file: protocol. Of course that brings up the issue of managing temporary files, or possibly maintaining the objects on the hard disk. This is probably the easist way to go, but...
I've been tempted to try my hand at writing a asynchronous pluggable protocol handler in C#. This really has no point except to improve my skills, but it could simplify things by presenting a united interface that the application needs to deal with.
But continuing along that line of thought, I could just embed a basic HTTP server in the application, and have the program communicate with the embedded browser over normal HTTP connections on the loopback interface. It'd certainly be easier to debug than a asynchronous pluggable protocol handler.
Hmmm... decisions, decisions. Oh well, while I chew on that I have something much more important to figure out: what markup syntax I want to use for embedded objects.