Writing a compiler/interpreter/parser with user-friendly exceptions is an order-of-magnitude harder. Primarily because more context is required, and context will take a shotgun to your precious modular design.
Only because you fail to use syntactic abstraction to automatically track the context as your metaprogram evaluates, then categorical lifting to recover the data you need along the metalevel execution trace.