It's the same as on other texture nodes, a Color output gives a 3-dimensional vector as output value, while the Fac gives a 1-dimensional floating point value as output. Which means Color gives you RGB values (which can be taken or interpreted as XYZ values where needed), whereas Fac gives a greyscale value between 0 and 1.
In case of the Wave Texture node this does not seem obvious, because when you choose an axis e.g. X, it takes the X values and outputs them on R, G and B channel which only results in greyscale values as well. I guess it is mostly to keep the texture nodes consistent to have both, a Color and a Fac output.
One thing might be that if some nodes only accept single values as input you would have to take the Color and a Separate RGB/XYZ node to pick one of those values. Or if a node only accepts vectors and you have a Fac output, you would need a Combine RGB/XYZ node and plug the greyscale value into all sockets to create a vector.
Now in almost all cases Blender is doing this automatically. Plug a greyscale value into a vector socket: automatically the value will be set on all three channels RGB or XYZ. Plug a color into a single float socket: Blender calculates a grey value from these three channels and sets it as value for the input.
However in some cases like the Noise Texture it is not the same. A default color ramp with black and white on left and right end converts colors into grey values, but the output of the Fac value and Color converted to greyscale do not give the same result.
This has something to do with chromatics, how color intensity and saturation are perceived and how they are displayed with Gamma correction and other things which are now too much explain and I'm not really an expert for this. Just keep in mind, a Color output gives a vector result and a Fac output gives a float value. A Gradient Texture is the same, you only get greyscale colors from both outputs, but still a Color output is a vector.