If you want to understand where the position problem comes, its from the fact that the mouse coordinates are separated from mouse_pos or your controller acceleration:
I have this in my game:
mouse_pos.x = pointer.x;
mouse_pos.y = pointer.y;
What you did is equal to this:
mouse_pos.x += mouse_force.x;
mouse_pos.y += mouse_force.y;
This will move mouse_pos with a different speed than the actual pointer pos...
Pointer.x/y isn't used anymore, but the concept is the same, I think.