Although the advertised advantage of a stepper is that it can be driven "open loop" (no position or velocity feedback required for accuracy, instead you just keep count of the steps) this is only true when the speed with which the step signals are being fed to it are below a certain rate threshold. Beyond that threshold, the stepper armature begins to lag behind the steps and position errors then occur.
Furthermore, the "stepper approximation" only holds when the compliance and inertia of the load fall within certain bounds. Outside those bounds, the relationship between the number of steps sent to the stepper and its angular position is broken and position errors again result.
This limits the use of steppers to certain applications where the stepper speed and its load are well-specified to be within the stepper's accuracy envelope, as specified by the manufacturer.
Outside that envelope, the designer must use a DC motor and shaft encoder, plus a closed-loop control system that uses position reports from the encoder to "juice" the motor in such a manner as to minimize or eliminate position errors.
This stepper-versus-DC motor-and-encoder tradeoff is well-known within the design community.