Existem muitos fatores que contribuem para isso, mas o tamanho é grande. A maioria dos sistemas de compilação modernos tenta executar a compilação parcial ao alterar o código, de modo que apenas as partes alteradas sejam criadas. No entanto, algumas ferramentas não são capazes disso.
Ao compilar milhões de linhas de código .NET espalhadas por centenas de projetos, seu tempo de compilação começa a se tornar bem grande. Ao compilar grandes bibliotecas enquanto também compila seu próprio código-fonte, como muitas vezes é feito no mundo C / C ++ nativo, você também aumentará seus tempos de compilação.
Especialmente com C e C ++, o tempo gasto analisando cabeçalhos é considerável. É um processo de E / S muito pesado para ler repetidamente milhares de cabeçalhos repetidamente. Esse é um dos motivos pelos quais a técnica de cabeçalhos pré-compilados foi criada. Claro, um SSD também acelera muito.
Editar: esqueci de mencionar que as compilações geralmente incluem geradores de código especializados ou compiladores DSL. Essas ferramentas são geralmente feitas em projetos internos que não são tão otimizados quanto as ferramentas amplamente usadas, de modo que podem se tornar um gargalo se usadas intensamente.