Could the lights in OpenGL (like GL_LIGHT0) be used for a 2D game?
GL_LIGHT0 and its buddies are a part of the fixed function pipeline - the way things were done before shaders. Any state that has to do with these doesn't actually do anything since you calculate your pixel colours in the shader yourself instead of GL figuring it out based on lights and materials and such.
I understand that a texture of a white circle with a gradient can be used to create some simple lighting effects in 2D. Is this used at all in more complicated systems? I understand the concept here, and if it isn't that useful outside of very simple lighting effects, I'd like to avoid it altogether.
Yes, you could use it to define different attenuations. Though a circle is redundant, you can just have a 1D texture and check it from the coordinate (length(lightPosition-pixelPosition),0).
I understand that there are basically 3 different types of light: ambient, diffuse, and specular. Will I still be using these concepts in a 2D environment?
Yes. You might want your whole level to be rendered with ambient light to look a little less harsh - absolutely black shadow for over half of the screen area usually looks somehow depressing, scary or anxious. Of course you might be aiming for those. The diffuse component will show up on most lit areas like usual, differing them from shadow. Specular is usually ignored (I think?), but if you really want the extra coolness you can combine it with the normal map thingy and a specular map and do some nice shines.
One thing that is bothering me is point lights. My understanding of a point light is literally a point in space that is a source of light; the effect of the light on the surrounding objects/environment is weaker as the distance from the light increases. Do I need to use an actual OpenGL point primitive paired with a home-rolled shader to achieve this kind of light? I'd rather not use the "texture of a white circle" thing because I would like the light to be hindered by walls, which can't be done using the texture approach.
It is indeed a literal point, but you only need the position of it to be able to calculate its effects - it can be rendered too, but it's not necessary to be able to compute its effects on the scene. That said, you can easily render it with the circle thing so the light itself won't be rendered, but it's effect will be directly visible. The hardest thing will indeed be the walls and other occluders and there are multiple solutions like raytracing through some acceleration structure or rendering the occluders extruded away from the light as shadows.