First things first, with X11 the server is the computer which produces the display output. The client is the program running on the remote computer making use of the display services of the server. You are right insofar, that you get this message because your client (running on the remote...
The function you want to use is an extension function, and you will need to dynamically load it to a function pointer. I would suggest using any one the available extension loader libraries (glew, gl3w, glad...) to help simplifying this process. Alternatively, consider a higher level library like SDL which...
The reason it works with ":0.0" but not with ":0.1" is because they are the X display and screen numbers. ":0.0" means the first screen on the first display and ":0.1" means the second screen on the first display. These numbers are for selecting which monitor you wish to display...
OpenGL over SSH means using an indirect rendering context which uses the GLX protocol to send OpenGL commands to the X server. The GLX protocol goes only up to OpenGL-2.1. There's no support for OpenGL-3 or later in GLX so far. Essentially you're SOL until someone finally gets around to...
glXChooseVisual is located in libGL not in libX11
You actually create an XColorMap based on the visual. However, when calling XCreateWindow, you do not set the CWColorMap attribute bit, so this color map is not used when creating the window. This could result in the window being incompatible to the GL context created for that visual.