Microstepping is not linear (Between full step positions) and should not be relied upon.
the error you will see is only between the full step positions.
I demonstrated this to a customer with a stepper motor set to a high microstepping resolution that had a mirror attached to the shaft and I pointed a laser at the mirror and put a pen mark on the wall on the other side of the room, I then moved the motor 100 microsteps, marked the wall and then moved back 100 microsteps, and the laser was a few cm from the original mark.
Gearing will be better for accuracy, but you have the downside of smoothness, noise, backlash or hysteresis.
If you need accuracy and repeatability with very small increments then closed loop servo would be the way to go (PID driver)