Lines/points shade a fragment when the mathematical equation intersect a diamond inside that pixel. Polygons shade a fragment when the entire pixel is inside the polygon. Your fix is ok because no line/point falls exactly on the boundary of 2 pixels and offsets just enough so the polygons don't oscillate on a pixel boundary.
For your texture blurriness, you can either use the NEAREST filter or negatively offset your polygons with the same value.