With the older-style Mesa-based DRI drivers there was a hell of a lot of code that was made dependent on one card or another.. a monolythic approach at doing drivers.
In all fairness to the old Mesa ways, when it was designed graphics cards were a lot more about fixed function hardware. There wasn't much sharing because there wasn't much to share, everyone had their own hardware bits.
With programmable shaders, and particularly universal shaders there's a lot more reason to make a low-level API. There's one layer to expose shading capability through Gallium3D in a standardized way and one fairly* hardware independent one to implement application APIs like OpenGL on shaders. (* optimization may still mean doing things in different ways due to different architecture; but the primitives are the same)