I guess it has it's place in solutions that really need strong quality assurance often tied with a requirement that the correctness is provable.
for example you can (even automatically) prove that this piece has (or doesn't have) error:
glBegin(GL_TRIANGLES)
glVertex3f(.0f, .0f, .0f);
// too few !
glEnd();
On the other hand this:
glDrawArrays(GL_TRIANGLES, 42, 666);
although much much faster, driver friendly and hardware matching, depends on a whole bunch of other state that might not be so easily reasoned about statically or mechanically.
It's the same kinds of reasons that languages like Ada are still in use for mission-critical software like avionics, air-traffic or railway control. These are not the kind of applications you find on average Joe's laptop or iPhone.