This is normally dealt with by the projection transformation. Typically, you either pass the viewport’s aspect ratio as a parameter (e.g. gluPerspective), or take it into account when specifying the horizontal and vertical bounds. Either way, the result is that one unit in eye coordinates corresponds to the same size on screen regardless of whether the direction is horizontal or vertical.
Ideally, you’d calculate the aspect ratio using the physical dimensions in mm, rather than the number of pixels, so as to get correct results on monitors with non-square pixels.