Ref's are basically a 1 to 1 replacement for instance fields for mutable data (that doesn't cause rerenders).
https://reactjs.org/docs/hooks-reference.html#useref
There's always need for escape hatches and maybe I'm missing your use case, but in the context of a discussion about how hooks are more complicated than classes, what were you doing before with refs to solve your "re-render" on change scenario?
Your example was likely contrived, but modifying innerHTML should be replaced by putting whatever in state and simply rendering it. And use state for dependencies where you want to re-run on change. Refs are just another way to keep state but not have it affect render cycle.