Casting to a raw pointer and back is a way to (unsefaly) cast a lifetime. You can’t get &'a mut T from &'a mut T, but you can get &'a mut T from *mut T for any 'a.
I think the cast is required because, without it, the resulting lifetime will be bound by both the lifetime of the iterator itself and the lifetime of the underlying VecDec. This is just my intuition though, I can’t give a precise explanation.