The executable binary generally dwarfs the assets (textures, models, level data, audio, etc.) so I doubt it makes sense to defer downloading code. If anything, you'd put any level-specific native code (rare these days - it's mainly scripts) into dynamically loaded libraries.
The executable has to be read from the disk, and until it's fully loaded nothing would show. Since startup time must be minimized it's good to keep your executable size small. Also newer versions would be smaller for updates off the internet. Most of all the executable has to be linked over and over again (by developers) and then copied or written to the some kind of disk/drive somewhere to start it.
But as you've said, maybe moving some big clunky parts to dll would help.