Not sure how about MESA on linux, but I think it is already capable of GL 3.1.
AFAIK, the softpipe is still stuck at GL 2.1 - last I tested with 14.04 it still was. But then again, with Ubuntu 13.10 and later you get at least GL 3.1 compliance across all relevant open-source drivers (nouveau, radeon, intel), depending on the hardware capabilities, of course. If you go bleeding edge, you “even” get GL 3.3 compliance for those. Proprietary drivers are way above that anyway, if the hardware permits. At max, NVIDIA provides a GL 4.4 beta driver and AMD currently offers GL 4.3 compliance.
There are only OpenGL 1.1 headers on Windows.
Headers only describe interfaces and say nothing about what the implementation used by the OS is actually capable of. What is done on Windows is that a driver registers itself (in the registry, what a coincidence), and is automatically loaded by the OS. I’m not aware of any way to suppress redirection to the implementation provided by an IHV like NVIDIA, AMD or Intel (With MESA, for instance, you can set an environment variable to explicitly state that you don’t want the vendor-specific driver to be used, but the softpipe). Then again, it wouldn’t make much sense because if you write a GL3 application and decide that you want everything to be rendered by a software-implementation, on Windows you’re out of luck.
If I want to use GL of higher versions, how do I do it?
To the user, the process is quite simple. As soon as the corresponding DLL (or shared object, or dylib) containing the implementation is loaded, you use the platform specific mechanism to retrieve pointers to functions said module, for instance wglGetProcAddress on Windows or the Linux equivalent, glXGetProcAddress. Essentially, this is what GL functions loaders like GLEW boil down to. They do handle a lot of other stuff but to get to GL functionality, getting a valid function pointer is all you need. Be aware that the above functions will return a nullptr if there is no current GL context in the thread from which they are called.
What you as a programmer need to do is use such a loader or write the loading code by hand (pro tip: use the first variant to preserve your sanity). What you need to expect from the user is that a recent driver for their graphics card be installed. The rest is usually handled by the respective operating system.
Download latest headers and use only features available on the platform?
Ready-to-use loaders liker GLEW either provide an updated header already or some loader generators, like glLoadGen, generate the loading code for you as requested. For instance, GLEW generally provides compatibility and core support for every GL version up until GL 4.4 - glLoadGen lets you generate a header for core, compat, for a specific version and possibly with additional extension interfaces, which is a very neat and powerful solution.