I would guess you are using 'rolled' ballscrews in your machine (less expensive), as opposed to 'precision ground' ballscrews (very expensive) ..
Any rolled ballscrew will have some pitch variations along it's length, meaning exact calibration at one point on the ballscrew does not guarantee exact calibration at other points farther up or down the length. Best practice as I understand it is to calibrate your axis over a longer distance. Perhaps over a distance of 150mm /300mm /600mm as your machine allows. In doing that you are averaging in whatever variations may exist in your particular screw.
As previously mentioned, backlash & mechanical issues also contribute to the numbers not showing up as expected. For the DIY-CNC crowd (such as most of us on this forum) part tolerances can get close, but will rarely be perfect.