The play ends when the referee says it has.
For instance, we often see personal fouls for late hits called despite the fact that the whistle had not yet blown.
Nothing about calling plays dead retroactively for forward progress after a fumble in the rulebook - if I missed it, please give the rule reference.
Late hits can be called without a whistle because there are other dead ball triggers for that - stepping out of bounds, a QB beginning a slide, etc. If another defender came and hammered the receiver that fumbled the ball on that play before the whistle was blown, it would not have been a late hit, because the play had not yet been blown dead by the ref.
In this particular instance, the receiver was still fighting for yardage, the ref hadn't blown the whistle, and he lost the ball.... and then the ref blew the whistle late for his own reasons. Maybe he realized he F-ed up in not blowing the play dead already and didn't want the team penalized for his mistake (likely). Maybe he shouldn't have blown the play dead at all, and then realized he F-ed up by blowing the whistle before the fumble was recovered (also possible).
Regardless, the opportunity was there to blow the play dead on forward progress before the ball came out. Ref botched that opportunity.
We called a time out... and then they didn't charge us with a timeout? Another weird call - I'm guessing not to penalize RU for them screwing up the call in the first place.
If this were the only screwy call in the game, I'd be much more willing to give the benefit of the doubt... but these refs were terrible throughout, so this one play wasn't even really out of the ordinary for them.