Основных причин, на мой взгляд, три, но деление это весьма условно, поскольку эти причины очень тесно связаны друг с другом.
1) Разработчики пишут программы для задач очень разного спектра и далеко не везде для их решения есть необходимость использовать навороты С++. Часто для написания, например, драйверов, библиотек математических процедур или базовых процедур ввода-вывода достаточно простого процедурного подхода и язык Си здесь является достаточным средством, и, более того, промышленным стандартом.
2) Далеко не везде язык C++ есть. Этот язык, в отличие от языка С, имеет чрезвычайно сложный синтаксис с огромным числом правил и исключений, и создание надёжного быстрого компилятора, порождающего эффективный код - очень сложная задача. Если речь идёт о каком-нибудь "простом" микропроцессоре (микроконтроллере), то создание компилятора языка C++ может быть бессмысленной задачей, которая не окупится, в то время, как потребность иметь средство чуть более высокоуровневое, чем язык ассемблера, есть всегда. Вот на роль такого средства подходит компилятор языка С.
3) При создании новых систем, на первом этапе, важно как можно скорее получить простой и надёжный инструмент, позволяющий реализовывать набор базового функционала и инструментов с которыми будут работать другие люди - развивать функционал и, в том числе, создавать новые более развитые средства разработки . И в роли этого инструмента почти всегда выступает компилятор языка С.