Mix shader is not complicated. It finds the color returned by each shader and interpolates between the two (in linear space) by the factor given. It's really just a mixRGB. Indeed, if we use it in Eevee, it's identical to shader to RGB -> mixRGB. (In Cycles, of course, this mixRGB has to happen for further ray bounces and has to preserve information like ray type and ray direction.)
Why is it different to mix shader two different roughnesses than to use a single, average roughness? I think the best parallel would be to imagine mixing two circles of different diameter:
When we take two white circles of different sizes and mix their colors, is it the same thing as taking one white circle of average size? Clearly not.
The same thing is true of roughnesses. Let's look at the same thing with a single lamp on spheres, but mixing roughnesses this time:
If we take a wide, dull highlight (1.0 roughness) and mix it with a tight, bright highlight (0.0 roughness) we're mixing two circles of different sizes. It is not the same thing as taking a medium highlight (0.5 roughness.) And the colors make it more clear what the difference is between mixing two different elements, and just taking the average of those elements.