As an ex Immediacy employee i used to see this sort of problem all the time.
Think of immediacy as being a standard .net web app that sits on top of the framework.
They have simply extended the base classes for things like the Page class and added some globally useful objects.
Immediacy does have its own base classes for controls ect but there s nothing stopping you creating your own controls based on the standard .net classes.
One trick I have seen where you need to do something specific that may break an immediacy function is to create a child application then call up pages from it within a custom control that you add to the main app.
This way your child app can do what it likes without breaking anything and the parent immediacy app and simply reads a stream from that app.
in its simplest form the trick is to simply create a control that does one thing ...
WebClient wc = new WebClient();
this.Controls.Add(Page.ParseControl( wc.DownloadString("/childapp/yourcustomthing.aspx") ));
The cleanest other way to do this is to implement the required child component as an ashx handler from what i ve seen.
The only issue that may bring up is that you lose the immediacy framework of objects in your child app, but you could easily pass in some key information via querystrings then build your own "depency cache" that contains the stuff you need.
It s not an ideal I know but immediacy does have a habit of making life difficult when you need to do anything above and beyond dropping in lists / similar plugins to pages or templates.