glfwMakeContextCurrent() makes the "context" current, and then GL.createCapabilities() binds that context to the LWJGL and the OpenGL library?
There is no context handle stored somewhere in LWJGL. The call to GL.createCapabilities() retrieves the OpenGL function pointers that correspond to the context that is current in the current thread and also populates the capability flags (which core versions and extensions are supported). This information is stored in a GLCapabilities object, which is then stored in thread-local storage. If there are multiple contexts made current in the same thread, the GL.setCapabilities() method can be called to reuse an existing GLCapabilities instance.
When and how the context is actually made current, is managed externally. GLFW does it own context management and so do other libraries. You can do your own context creation and management in LWJGL, but you have to use OS-specific APIs (i.e. CGL, GLX, WGL, EGL).
I can call GL.createCapabilities() anytime after glfwMakeContextCurrent() and it will work?
Yes. You can call GL.createCapabilities() anytime you know there is an OpenGL context current in the current thread.
Just curious: how is this context passed since the GL.createCapabilities() method doesn't take any parameters?
LWJGL uses the OS-specific APIs mentioned above to retrieve the current context from the current thread and query its capabilities.