Thanks again guys for your help.
Right you are moosa. It's easy to get caught up in the implementation that you sorta forget what it is you needed to do in the first place. After sleeping on it I've come up with a pretty good solution for a 2D 'spotlight'.

What I've done is simply render everything normally then after all that is over with add in one of these blending modes, through some trial and error, have come upon:
gl.Enable( GL.TEXTURE_2D );
gl.BlendFunc( GL.ZERO, GL.SRC_COLOR );
//gl.BlendFunc( GL.DST_COLOR, GL.SRC_COLOR );
//draw texture
The texture is just a .jpg with a black background with a white circle inside that becomes darker as the radius increases. When applied with one of those blending functions basically draws the screen with alpha values that correspond to the white portions of the texture. Works like a charm! Really fast and pretty.

However I now have another problem: Since there needs to be multiple of these 'circles' illuminating over different objects I need to generate them dynamically, and can't use a pre-drawn texture.
[edit] Update: OpenGL is fantastic. I'm glad I went for the low-level aproach rather than using a library. Some code:

GLuint texture;
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, c );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
//then draw a black background and some circles and copy the screen:
glBindTexture( GL_TEXTURE_2D, target_texture );
glCopyTexSubImage2D( GL_TEXTURE_2D, 0, xoffset, yoffset, x, y, width, height );
It seems I just took a major FPS loss from this though. Basically having to draw two black rectangles and some circles, then texture that onto the screen at the end of the frame...every frame.. I'm not sure I can afford that.

Can anyone optimize what I'm doing?