Also the old OpenGL API had immediate mode functions which encouraged people to trickle in interleaved data and operations; the exact opposite of what 3D APIs need to run fast.
Imagine that you plan to manage 3Million vertex and to draw 6M points on the screen(fragments) so you make your pipes for it.
Now , what happens when you need to update only 200 pixels but want to draw 30 Million vertex on them? You can't do it on fixed.
What happens when you want to do 10 passes to the screen(60M points) but you just use textures with 4-8 vertex?. You can't do it on fixed.
With non fixed you could just use your compute units where you need them.