The only output of a fragment shader is going to be a vec4, since you are writing a color (or value) to a render target.
And you can have multiple render targets.
But in this case, since there is only one vec4 output, and since (in general) outputting colour is something you will always be doing, the GLSL compiler is clever enough to figure out for itself that this vec4 output must be colour. Personally I'm apprehensive about any kind of mysterious behind-the-scenes ill-defined magic, but that's the decision the ARB have made for GLSL.
However, and following a quick read through the GLSL 150 spec, gl_FragColor is still available for use but just marked as deprecated. That doesn't mean that you can't use it - it just means that it may be removed in a future version.