Bruno and I have been working on exactly that lately:
http://www.java-gaming.org/forums/index.php?topic=17835.0About the deferred jar (code) loading, yes its possible with some JS magic. Basically you have one main loading applet that does liveconnect calls to a JS script, which loads other dummy applets with the specified jar as the archive param in the background (invisible to the user). This will also make the jars get cached by the plugin... by using serversided scripts you could even display progress in your loading applet (by making the jarfile actually a script that feeds the actual jar, or its progress when you specify a GET parameter).
All in all its kind of a hassle... But maybe its worth the trouble when your code jars are >500K. This technique is already(?) / will be supported out of the box by the js script bruno posted.
The alternative is signing your applet and make a custom classloader that does this.