I agree that without continuous position feedback (similar to a servo motor*) you are not going to get true sinusoidal motion, but you might
be able to get some
sort of speed-ramping. DC motors just don't respond that linearly to drive voltage/current. I think it's just going to take some experimentation.
The motion is also going to depend on load (mass & friction). You can "map" the torque/voltage curve for aDC motor, but a speed/voltage curve is a lot trickier, especially at slow speed. If you have a "nice" constant load (like lifting a weigh on a pully) you could convert torque to speed, but I suspect you don't have such a nice load.
If more feedback sensors were added, say a total of 5, could the system be more reliable? two near each end and one in the middle?
I'm thinking 4 sensors... An additional sensor for "almost open" and "almost closed".
And, I'm just thinking maybe a non-linear, non-smooth voltage curve might work best... Something like run at full speed (or accelerate) at the start of the motion. Then when you hit "almost open" or "almost closed", drop the voltage quickly. Then, ramp-up the voltage to make sure the drawer closes. That's how a mechanical door-closer works. It closes quickly at 1st, then it hits a point near-closed and it suddenly slows-down.
* A regular servo motor only rotates about 180 degrees, so it probably won't work... I suspect you'll need to gear-down and use several revolutions.P.S
An alternative is a stepper motor. With a stepper motor, you can precisely control position & speed, and you can run slow (or "hold") at full-power. You'd still generally want 2 sensors to confirm your end-points.