Every x milliseconds record the position of the controller. Taking the last two readings calculate a vector and apply the vector as an impulse to the object being thrown.

While this works ok in most circumstances there still seems to be something missing for a more natural feel.

I would agree with max, if an object rotates,
this will have an influence on his flight curve,
a good example for that is a curve ball at a game of softball:

While Iām not very good at math, if I understand this image

correctly, you will have to calculate the rotation into the velocity over time, like an exponential function