Trace a ray from eye to mouse position and check collisions with planes created for all vertices in a way that a vertex is on the plane and the plane is perpendicular to eye position.

[pascal] Quadrance:= Infinity;
Normal:= normalize(Ray.Origin - Vertex.Pos);
a:= dot(Ray.dir, Normal);
if (a < 0) then
begin
Dist:= Length(Ray.Origin - Vertex.Pos);
t:= ( -dot(Ray.origin, Normal) + Dist) / a;
PlaneHit:= Ray.Origin + Ray.Direction * t;
Quadrance:= DistanceSquared(Vertex.Pos, PlaneHit);
end;[/pascal]

The vertex whose position is closest to its plane hit point will be the one you want. You might also check for smallest t if that distance is similar among a couple of vertices, so the closest one to the viewer gats selected. Use gluUnProject twice with winz 1 and 0 and subract to get rays direction.