Hola Boret, mira C es un excelente lenguaje asi como otros Basic, Pascal, etc.
La razon por la que existen varios lenguajes es muy variada. Por ejemplo, se da por la simple razon que alguien no se sentia a gusto con los disponibles y decidio desarrollar el propio o porque la complejidad de las aplicaciones a desarrollar no era factibles hacerlas en otro lenguaje de menor nivel, por el tiempo, etc.
En cuanto a la pregunta de cual es el mejor es bastante dificil de contestarla. Esto porque no se le puede decir a alguien que use uno o el otro sin saber si esa persona tiene algun conocimiento previo de algun lenguaje de programacion o no.
Aparte de ello, en el desarrollo de un programa se ven incuidos muchos factores, por ejemplo cada programador tiene su estilo propio y en esto de la programacion para llegar a un resultado se pueden tomar varios caminos; cual es el mejor, es dificil de decir.
La otra pregunta tuya, por que el assembler no le gusta a muchos?. Bueno, la razon principal es que no es tan popular como los lenguajes de alto nivel y no muchos conocen de el. Ademas la programacion en assembler es engorrosa, por ejemplo lo que te puede llevar escribir una linea para hacer algo en basic, te puede tomar 4 o mas lineas en assembler. Seguidamente, tu tienes que tener muy claro y ser muy ordenado en lo que vas a hacer, ya que a diferencia de los lenguajes de alto nivel (Basic, Pascal, C, etc.), el assembler es para aquellos que verdaderamente quieren saber como funcionan las cosas a profundidad y por consecuencia el assembler es mas poderoso que cualquier lenguaje de alto nivel, porque practicamente tu estas muy cerca de "hablar" el lenguaje que entiende el "micro". Esto te da la grandisima ventaja que aunque escribas docenas de lineas de programacion, el codigo generado es mucho mas pequeno que cualquier lenguaje de alto nivel. Aparte de ello, la ejecucion del programa es mucho mas rapido que cualquier lenguaje de alto nivel debido a lo mencionado anteriormente. Cabe mencionar entonces, que el poder del assembler radica precisamente en esa comunicacion a bajo nivel, con el cual si no se tiene cuidado, uno puede echar un equipo o micro a la basura por un error de programacion, con los lenguajes de alto nivel es muy dificil hacer eso o imposible. (Trata de trabajar con puntos flotantes en basic y divisiones, sumas, etc. con variables de 32 bits >

, un poco dificil verdad? )
Pero no todo es color de rosa en assembler. Una gran desventaja del assembler es el tiempo que se dura en aprenderlo, ya que assembler no es tan portable como los lenguajes de alto nivel. Esto quiere decir que para cada "micro" tienes que aprender un assembler especifico para ese micro, mientras que con un lenguaje de alto nivel son practicamente los mismos comandos para una amplia gama de micros. Ahora, dependiendo del micro y sus opciones asi su complejidad de comandos, por ejemplo el PIC de Microchip se considera una belleza porque solo usa 35 comandos (gama media) para poder utilizarlo, mientras que otros "micros" pueden usar mas de 100.
Por ello la curva de aprendizaje en assembler es mayor que en otros lenguajes, dando al traste con su popularidad.
Finalmente, debido a que me extendi un poco en el comentario, cabe notar que puedes saber programar en assembler, que sepas programar bien es muy diferente.
Esto porque alguien que tal vez use Basic pero sea un muy buen programador puede encontrar una ruta que sea muy eficiente para lograr un objetivo, mientras que alguien en ensamblador pueda saber programar pero se complique mucho para alcanzar el mismo objetivo, haciendo de esta forma un programa muy ineficiente.
Asi que en resumen cual es mejor depende de muchos factores, cual lenguaje quieras aprender depende de otros factores (importa la velocidad de ejecucion, importa conocer como funciona el micro, tienes conocimiento de programacion, etc.)
Asi que en mi opinion en orden de complejidad y funcionalidad (de menora a mayor) el orden quedaria asi: Basic, C, Assembler.
