The problem with Point Sprites is they are kind of a half way house between real geometry and a 2D blit. To affect point size in shaders you need to ape the OpenGL GL_POINT_DISTANCE_ATTENUATION function which can be found on most shader tutorial sites, like say the LightHouse3D one.
As for “perspective projection” if I understand you correctly you would be into a world of hurt with quite heavy maths in the fragment shader - which would slow things down IMO. I am not sure how good the results would be, or if the effort would be worth it.
So much better to do QUADS as any perspective will be correctly calculated intrinsically. With Triangle strips or indexed triangles you can reduce the vertices, of which the volume on modern HW is not going to be a huge issue anyway. With Geometry shaders you can even describe them with a single point.
If OTOH you want to simple create a smoothed point or circle then you can use something like the following in your fragment shader…
vec2 mod_coord = gl_TexCoord.st * 2.0 - 1.0;
gl_FragColor = gl_Color * (1.0 - length(mod_coord));
If you want to read up about all of this then I would recommend the http://www.lighthouse3d.com/ site I mentioned earlier.