Vertex coordinates are real numbers. A pixel spans from coordinates (x, y) to coordinate (x + 1, y + 1). So (x, y) is actually its corner, as well as the corner of 3 other pixels. So, when you draw points, you must use center coordinates, ie. + 0.5. That's not a workaround, that's how things work.
Images on the other hand, use integer coordinates, where (x, y) is exactly one pixel, the one at row y and column x.