i ran into this issue on ubuntu 16.04 (64 bit), and i can confirm that both workarounds (using Nouveau and setting LD_LIBRARY_PATH=/usr/lib/nvidia-375 ) fix the issue.

to add a bit more info, it seems that in the failing case, glxinfo (or presumably the other apps), can't find the GLX_indirect library that it trys to load dynamically, which has something to glvnd:
https://github.com/NVIDIA/libglvnd

looking at ldd, you can see that glxinfo is finding the GL libraries fine, using the system-set ld.so.conf settings that the nvidia driver sets up:
moskewcz@mari:/etc/ld.so.conf.d$ ldd /usr/bin/glxinfo
    linux-vdso.so.1 =>  (0x00007ffe4779c000)
    libGL.so.1 => /usr/lib/nvidia-375/libGL.so.1 (0x00007fcd87f35000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fcd87bfb000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcd87831000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcd8762d000)
    libGLX.so.0 => /usr/lib/nvidia-375/libGLX.so.0 (0x00007fcd873fd000)
...

the paths are set here:
moskewcz@mari:/etc/ld.so.conf.d$ cat /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf
/usr/lib/nvidia-375
/usr/lib32/nvidia-375

using strace, we can see the difference that setting LD_LIBRARY_PATH makes:

# working case, opens the correct lib:
moskewcz@mari:/etc/ld.so.conf.d$ LD_LIBRARY_PATH=/usr/lib/nvidia-375 strace glxinfo 2>&1 | grep GLX_ind
open("/usr/lib/nvidia-375/tls/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/nvidia-375/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = 4

# non-working case, fails to open libGLX_indirect.so:
moskewcz@mari:/etc/ld.so.conf.d$ strace glxinfo 2>&1 | grep GLX_ind
open("/lib/x86_64-linux-gnu/tls/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/tls/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/tls/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
[...snip many more repeats of failed-to-load libGLX_indirect...]


however, it's not clear why, under x2go, the nvidia code isn't searching in /usr/lib/nvidia-375 -- but it's not clear what code it uses for the DL loading, maybe it is somewhere in the glvnd code.

mwm