Well I've been thinking about it and while editing the quest itself is the most direct way and the best way as long as your mod is the only one running, it's not ideal if any other mod should try to edit the same quest.
So how immediate do you need the change to be registered by whatever it is you're doing? I'm thinking a less direct but more compatible method would be to check every few minutes, i.e. stick your original code inside an OnUpdate() block.
To check every five minutes, you'd need something like:
RegisterForSingleUpdate(300)
Event OnUpdate()
If favor257.IsStageDone(20)
yourRef.Enable()
Else
RegisterForSingleUpdate(300)
End If
End Event
You could also call RegisterForUpdate instead of RegisterForSingleUpdate but you'd have to make sure to call UnregisterForUpdate when your condition becomes true.