One thing that would help with your 'monster application' concern is using MEF, the Managed Extensibility Framework (part of the Silverlight framework in version 4), to dynamically load pages. Silverlight applications download one (or more) XAP files to the client (bascially just ZIP files with a .xap extension) when the page hosting the application is requested. With MEF 'lazy loading', you can separate your app (pages) into separate assemblies, which end up creating separate XAP files.
This post by Brad Abrams has an example (and sample app download) for doing so:
This technique can be used to make the app start up faster for the user, and has the side benefit of starting up faster in your development environment as well. This means less time waiting for the app to appear in the browser each time you Ctrl+F5 or F5 during the day (which is probably *many* times).
If you use this technique, I'd recommend removing your HTML-based navigation and IFrame approach and making it all one Silverlight app (with navigation included).