Lisp isn't even all that unique any more. Garbage collection, closures, REPL & macros are all available in other languages these days. Scala for instance has all these features.
Homoiconic isn't actually a very meaningful term. In Scala code is also represented as a data structure (AST), and macros produce ASTs. Heck C code is represented as a data structure: the string (although of course C does not have macros like Lisp & Scala).
In my post I said: "a fully homoiconic programming language where code is represented as a simple data structure at the heart of the language." By which I mean: a core built-in data type that is well supported and easy to use.
I wouldn't call an AST a simple data structure at the heart of any of the languages you mentioned. The powerful thing about LISP is that when you manipulate data the easiest tool to reach for is lists, and when you manipulate code you use lists.
An AST is just objects. Just like Lisp was designed to manipulate lists, Scala is designed to manipulate objects. The difference is that an AST has more structure, which is a good thing. The least structured are just plain strings, then come s-expressions, then ASTs. Lisp is only halfway there to a modern macro system.
I beg to differ. I won't even look at a language who doesn't have a macro system like CL does. Which only really works out well if its homoiconic.
(For serious use that is, certain feature can of course be interesting regardless of others, e.g. I find erlang's implementation and concurrency mechanisms very interesting.)