Исполняемый файл - это не прямой набор инструкций. Он может иметь специальную структуру - .com, exe, линуксовые и юниксовые бинарники отличаются - CIL компилируется в машинный код, но в результате создается не просто байткод команд, а бинарник определенного формата, с которым умеет работать операционка - машинный код должен каким-то образом загрузиться в память, возможно даже не весь а частями, точка входа должна быть сообщена процессору и так далее.
Сейчас практически несуществует линейных программ, которые написаны таким образом, что выполняются в моносреде - все пишется из расчета многозадачных ОС.
Таким образом, в CLI обычный машинный код, который выполняется процессором, но который содержит определенные закладки, вызовы функций операционных систем для того, чтобы этот код успешно работал в определенной ОС, чтобы он не загребал под себя 100% CPU на пустые циклы и так далее.
Это не значит, что там немашиный код, это значит что машинный код написан для работы в определенных условиях и содержит определенные вызовы.