I want to move my camera around now but my lights are just ignoring camera movement. I think it’s gl_ModelViewMatrix[3].xy that’s the problem; I want the world coordinates of the sprite.
To get the vertex position in world space you have just to multiply your vertex by the inverse of the modelview matrix.
Just the inverse of the view matrix, otherwise you are back to model space.
OpenGL normally does not make use of an (explicit) world space, there is just modelspace and viewspace (hence the transformations are lumped together into the modelview matrix). A transformation matrix to/from world space is something you will have to supply manually to your shader (through a uniform variable).