read() and readMicroseconds() will always give you the current position of the servo that is sent out on the control line. If you call those functions repeatedly you can see the position change until it reaches the final destination.
If really necessary, one could add a little function to tell if it's moving. The criteria used in the code is whether the internal variable speed != 0. If so, it's still moving. But that variable isn't exposed at the moment.
By the way, reading the servo with read() or readMicroseconds() is just returning an internal state variable and costs basically no time. It's just as efficient as the proposed function.
Korman