No creo que la razón esté tanto relacionada con el rendimiento como con la interoperabilidad. El lenguaje C ++ es más complejo que el lenguaje C, pero desde el punto de vista del rendimiento no debería haber una diferencia notable de ninguna manera. Algunas construcciones de C ++ son más rápidas que el equivalente de C ( std::sortes más rápido que qsort) y probablemente haya buenos ejemplos al revés.
EDITAR: En el lado de la interoperabilidad ...
Básicamente, el estándar C ++ no define algunas de las cosas que podrían ser necesarias para una fácil interoperabilidad entre binarios creados con diferentes compiladores / versiones. El problema más notable aquí sería la convención de nomenclatura para los símbolos en el binario. En C, el lenguaje define una sola asignación de cada símbolo en código al nombre del símbolo binario. Una función llamada my_functioncreará un símbolo en el binario llamado my_function. Por otro lado, y debido a características como la sobrecarga de funciones, los nombres de las funciones de C ++ deben ser mutilados(traducido a diferentes símbolos de función en el binario, codificando los tipos de argumentos y tipos de retorno), y el estándar no define cómo se realiza la alteración. Eso, a su vez, significa que la misma función en C ++ se puede compilar en diferentes símbolos según el compilador (a menos que extern "C"se use para forzar la interoperabilidad de C para esas funciones en C ++).
Al final del día, la interfaz entre el lenguaje de programación y el código nativo tendría que ser una interfaz C de todos modos, incluso si los detalles de cómo se implementa internamente podrían ser C / C ++ / cualquier otro idioma nativo.
(Intencionalmente no quiero entrar en una guerra de pretensiones lingüísticas, C ++ es realmente poderoso, pero también da un poco de miedo ya que es un lenguaje mucho más complejo que C, y algunas cosas que parecen simples pueden tener un impacto en actuación)