The reason you are losing steps is because you are applying a force greater than a single step could handle. Basically the force applied is forcing the motor into the next step, which isn't good. Try slowing it all down, so that the force is lower (both dynamic and static forces).
But if its waaay too slow, or you need more force . . .
If you buy/make an encoder and put it on the stepper motor, your controller can know when a step is skipped and correct for it as a closed loop system (steppers are open loop). Or you can buy some dc motors with built in precision encoders, too . . .