So my question is two fold:
1. Do you have any examples (aside from PL/compiler related work) that LISPs code-as-data features are used to solve problems that otherwise would have been much harder?
2. Given that you've likely substituted 50,000 lines of Java code with 300 lines of LISP, it goes without saying that you are a lone wolf programmer. But do you, yourself, ever have trouble understanding what you've written after some time? Also, how do your refactors go? Do you do them at all?
Polynomials can be easily manipulated, such as taking a derivative, and the result is still valid executable code.
Macros use homoiconicity all the time, doing code walking and code expansion.
Functions can construct and return functions easily.