I think everyone agreed that it was theoretically possible to write driver code which would look at the requested shader processing, identify the cases which a fixed-function chip could handle (a lot of apps can still run on fixed-function chips today), then set the FF logic and proceed with the draw commands, and that's as far as it went. There are still some unanswered questions with that approach, like "what capabilities should the driver expose to the app and how do we manage that inside the driver stack ?".
Any Gallium3D-based 3D driver would normally expose shader support to the app, but some apps implement different code paths depending on what the driver supports and those apps may only work on fixed function chips if the app chooses fixed-function code paths based on the available driver extensions... then the 3D driver would turn the fixed function calls into shader code, pass that down to the Gallium3D HW driver, which would then translate the shader code back into fixed function operations... but which would fail if the app passed down "real" shader code rather than a shader implementation of fixed function operations. Maybe.
On the whole, implementing a traditional mesa stack for pre-shader chips seems like a better (if less interesting) solution.