Lookup functions and redirection like INDEX() and OFFSET() usually act on (possibly named) cell/range references, so they should not need to have that “volatile behavior”. When a cell range changes, references will update accordingly, which should be sufficient for triggering a recalculation.
There may be contexts where this does not apply, so they need recalc “always” anyway. IDK. I guess @Lupp has more experience than myself when it comes to this…
The INDIRECT() function is an exception for this type of redirection operation. It operates on a textual (possibly “hardcoded” in your formulas or data) representation of an address, which will not update when the range is altered. This makes me think that INDIRECT() needs to behave like a volatile function, which is one reason why I try to recommend the (slightly less intuitive) OFFSET() instead of INDIRECT() whenever possible.