Now, if you already have an Arduino in your circuit, you can think about using PART of the arduino CPU power to replace the circuitry. The "desired position interface" can go away entirely (you already have it internally.) You can gain considerable flexibility in the actual position feedback mechanism (hall effect, linear encoders, optical...)
For my UGV, I'm essentially currently doing this (well, I have the code, and the motor is installed - I have yet to complete the interface between the two) for the steering mechanism; my DC motor is a 12 volt DC Pittman gearmotor, feedback is a potentiometer.
Currently my software is a simple "window comparator" algorithm; depending on how well it works (or doesn't), I may switch it over to a PID algorithm.
In order to create a servo from a regular DC motor, you either must be able to gear down the output to use a potentiometer, or you need a way to count the turns of the shaft (from the motor or gear) in either direction (using a quadrature encoder, hall sensors, etc).