Having everything compiled in the exe does make the exe bigger. Another advantage of runtimes is security. I can run a certain app and know that it won't modify my computer.
Native code is fed to and executed directly by the processor. Byte code or intermediate code is read by the runtime and exeucted in a big fat switch statement. Some of the advantages of using intermediate code are portability, security, and easy implementation of advanced features (e.g. in VB6 declaring On Error Resume Next insterts a special instruction between each line of compiled code that marks the position as a resume point). A disadvantage would be the performance hit. Of course .NET provides the best of both worlds by allowing matching intermediate and native code side by side.