You cannot implement simple, modular, debuggable, composable DSLs with functions alone. And you cannot tackle complexity without DSLs.
> Yes, macros can be useful in certain cases
In most cases. Cannot think of anything beyond "Hello, world" that does not deserve a DSL implementation.