I think the problem is that for most languages, the AST is very complex, and writing a transformation pass isn't something you do as a one-off hack.
Lisp famously keeps things simple. I think we could do better than that on syntax, but designing a language with an AST designed for hacking still seems like a good idea.
But there are other ways a language can be easier to hack on. The gofmt tool can do a search and replace on Go expressions and also write the output in Go's standard format. This builds on the language's strengths: (1) having a standard format (2) mostly unambiguous references to imported symbols, so you don't need type-checking to disambiguate. This makes it much easier to find all references to a function.