Surely that’s abstraction rather than indirection?
Maybe you’re using it in a different context than I’m used to but I don’t see anything indirect about “call function that passes it’s result to another that updates the data”.
Sure it’s not “update state directly” but that would make every pattern “indirect” which makes little sense.
What you’re describing would make any MVP, pubsub, or observable system indirect. If so, well, fine - fair enough - but it still makes OPs complaint strange.
(Thanks for all your work btw)