Not quite the same, but I find "data-oriented programming" to be a very strong method for managing large codebases. By that I mean having data structures that designate the end state that you want, having another set of code that gets you to those end states, and maintaining a pretty clear boundary between the two.
(If you like with "Functional Core, Imperative Shell", this is a way to further divide the Functional Core.)
It works well because it narrows the surface area of a lot of possible bugs: either your configuration is wrong, or your code doing the transformations is wrong.
You kind of describe flow based programming (FBP) whereby data is passed to stateless functionality.
Things like Unix pipes, Node-Red and n8n are inspired by FBP.
I agree with what you describe, also reuse is simpler because code tends to be stateless.