Yo no trabajo con C, sino con C++, que son lenguajes completamente distintos y muchas veces se comete el error de mezclarlos.
Empleo C++ por varias razones.
1. Es el lenguaje estándar para hacer aplicaciones en Windows. Hay que comer y pagar cuentas, así que hay que saber lo que te pide el mercado. Y el mercado te pide C++ (aunque en los últimos años C# ha ido ganando fuerza).
2. Es un lenguaje que te permite agregar diferentes capas de abstracción a diferentes niveles. Por su naturaleza orientada a objetos te permite crear estas capas, y encapsular funcionalidad en distintos niveles. En una capa presento la información al usuario a través de una GUI, en otra capa solo manejo las reglas de negocio y la validación y manipulación de datos, en una capa más abajo me encargo de obtener los datos desde mi fuente (sea un archivo, una base de datos, etc) y si aún quiero, puedo crear otra capa que trabaje directamente con el Hardware. Ningún otro lenguaje te provée de esta facilidad. C es un lenguaje de bajo nivel (muchos dicen que es ensamblador con funciones), pero difícilmente llegarás a estructurar una aplicación de esta forma. ¿Las ventajas? Si le muevo a una capa, es garantía de que no fastidio alguna capa más abajo.
3. C++ es multiparadigma: programación estructurada, programación orientada a objetos y programación genérica. No existe otro lenguaje así. C es estríctamente estructurado, Java solamente orientado a objetos (el hecho de que tenga "genéricos" no lo convierte en lenguaje de programación genérica, no cumple los requisitos), C# es orientado a objetos y en la versión 2 también incorpora programación genérica, pero no la estructurada, Delphi es estructurada y orientada a objetos, y VB... bueno, es VB. Claro que es un arma de doble filo, sobre todo para quienes no saben aprovechar las características de los tres paradigmas.
4. C++ es portable y estandarizado. Llevó mucho tiempo, sudor y sangre, pero lo es. Hay un comité encargado de estudiar y (en su caso) incorporar las ideas de empresas, programadores, académicos y de todos los interesados. De esta forma (y aunque lleve mucho tiempo conciliar posiciones), todos quedan contentos. A diferencia de Java, que depende de una empresa que puede hacer lo que le de la gana. El mejor ejemplo de esto quizás es C#, donde vemos que en la versión 3 y 3.5 Microsoft hizo lo que le dio la gana y con la incorporación de LINQ está haciendo un desbarajuste horrible del lenguaje.
5. Debido a que puedes trabajar a bajo nivel, directamente con el SO o con el hardware mismo, es extremadamente rápido y eficiente. A diferencia de Java que corre sobre una máquina virtual lo cuál ralentiza mucho los tiempos de ejecución, o de C# que se compila a un lenguaje intermedio (MSIL) para después compilarse a código nativo (perdiendo tiempo de proceso), además de que se necesita un "framework" de más de 50MB de tamaño. Y eso por no mencionar a VB o Delphi, que están basados en COM.
6. El lenguaje te permite tomar las decisiones que quieras, aún a costa de que éstas sean erróneas. Esto también es un arma de doble filo, ya que permite al programador experto poder hacer comunicación entre procesos y manipulación libre de la memoria para obtener mejores resultados... mientras que permite al programador inexperto poder hacer que su máquina explote.
7. Una de las cosas que se critica de C++ es que no tiene una librería estándar "moderna", por ejemplo, con GUIs, a diferencia de Java o C#. Sin embargo, la cantidad de librerías escritas es tan grande (MFC, WTL para Windows, KDE, GNOME para Unix, Cocoa para Mac, e inclusive algunas portátiles como Qt) que hace de este punto algo totalmente irrelevante. Además, las librerías fueron diseñadas así ex profeso, debido al requisito de la portabilidad (por ejemplo, una GUI la podría soportar una PC normal, pero no necesariamente otros dispositivos como una Palm).
8. La compatibilidad con la Interfaz Binaria de Aplicación (ABI, Application Binary Interface) de C hace que la interoperabilidad entre estos dos lenguajes sea extraordinariamente eficaz (de ahí que muchos piensen que C y C++ son lo mismo, o que simplemente C es un subconjunto de C++). Y como todos los sistemas operativos de hoy en día están escritos en C, pues eso hace que C++ pueda interactuar directamente con los SOs de forma prácticamente transparente.
Bueno, estas son algunas de las razones que puedo pensar al momento. Te recomendaría que revisaras algunos sitios informativos como en.wikipedia.org/wiki/C++ para mayor información sobre las capacidades del lenguaje. Sobre su futuro, escribí esto hace unos meses, quizás te sirva:
http://kithkanan-programacionencpp.blogspot.com/2007/03/editorial-el-futuro-de-c-y-win32.html
Saludos.
P.D. También yo soy bastante necio, y probablemente muera de hambre en unas décadas, porque seguiré programando en C++. Pero moriré feliz.