QuakeC was compiled into QuakeVM bytecode, which made all modes and logic portable between platforms without having to recompile things everytime, unlike what had to be done for Quake 2 (which was 100% native code).
This hurt performance a bit but in the longer term benefited the modding scene massively.