May be an issue of "step loss".
Steppers don't feedback their position. The computer sends out a step and merey assumes it (the stepper) executes it. If resistance is greater than force of step motor, step is sent but force overrides it.
First thing to check is for binding. If the system binds or has enough residual friction, the stepper may not have the "oomph" to overcome it.
By sending it "home" you reset the system and it all starts over or it loosens stuff up.
How so??? If you're dithering/oscillating back and forth and have a sliding bearing (as opposed to rolling element bearing) supporting the device, you could be 'punching a hole' in the lube locally and the system is binding as a result.
I'd first do a thorough cleaning and maintenance/lubing of any sliding elements. Check, relube or replace any rolling element bearings that are not moving freely. Check for linkage binding or motor bearing binding.
In this case, friction is probably your unseen enemy.