You can always choose not to reject again if some number of rejections fail. With a sufficiently large random number range, the chances of rejection at any step can be made tiny, and the possibility of successive rejections drops exponentially with the number of rejections allowed until you have a theoretical probability smaller than the probability of hardware bit errors on the platform itself. If this happens, you can either throw once more and use that result, with a tiny amount of modulo bias, or you can just throw an exception.
If you reduce the range to the nearest power of two then it's expected to only need 2 iterations on average.
And if the number generator is guaranteed to generate every bit pattern eventually, then it's guaranteed to terminate.
That chance is strictly zero though. While it's theoretically possible for the loop to never terminate, such an event is basically never going to happen in any real world scenario.