Unhygienic macro systems are not useful for architecting large systems of perfect, pure modules. They’re great for sketching out abstractions that work on a semi-local level. They essentially enhance your ability to quickly reinvent the wheel, which is very valuable since, despite our perennial efforts to make it otherwise, the wheel must be reinvented quite often [...]
I believe there is a connection between fexprs and laziness. It could be that programming mostly in fexprs and only using eval when necessary gets you something like what lazy evaluation does for Haskell. However, it may be problematic to build programs mostly out of fexprs rather than functions.