My guess is that not every object needs to be compiled to binary pre-run. I have a few class libraries that house alot of my data access functionality. All of my different apps reference those dll's, but I didn't make one for every database. If the JIT compiler compiled every object in that dll from IL to binary; it would be an insane amount of wasted space.
Atleast, that's my take on it.