RE: Can someone explain exactly what CIL code is?
Often you don't know whether some code will be called by X++ runtime or CLR, and you shouldn't care. You write a piece of logic and it should work regardless if it's called from a form, from a batch, from a web service or anything else. Only if you have special needs, you need to make special arrangements. An example is using client-bound objects in a process that could be executed on server.
Sometimes it's clear that you're working on a class created from a form, for instance, therefore you know that it won't run in CIL (there is no CIL on client). But you normally don't need to think about it.
Regarding the parameter, is it a user option at all? I thought it's only available from the developer workspace - you can use it to simplify debugging (documentation from Microsoft: Debug in Interpreted Mode Your X++ Code that Runs as .NET CIL). Needless to say that development and debugging shouldn't be done in production.
Also note that the checkbox is specifically about the business operation (SysOperation) framework; some components such as batch jobs will still run in CIL even if you turn off the parameter.
Your last question is why Microsoft keep something that we use only in certain situations. The answer is - because it's beneficial in those situations when we can use it. The key difference is performance - native code instead of interpreted X++, compiler optimizations, better garbage collection and so on.