I think it depends on how you want to define a lisp. It really is just a line in the sand, because for every feature that you might think is defining of "a lisp", somebody's probably made a lisp that doesn't have it. For example:
- Lone Lisp (currently) doesn't have macros, but it uses the usual s-expression syntax and calls itself a lisp. Is it a lisp?
- Wikipedia has a list of languages that are considered to be somewhat homoiconic, but don't have s-expression syntax. Julia and Elixir both extensively use hygienic macros and are considered to be homoiconic, but don't use s-expression syntax. Are they lisps?
- Rust also has a declarative hygienic macro system reminiscent of Scheme's syntax-rules, and an even more powerful procedural macro system, but the macros are clearly separated from the rest of the language with a ! and it's definitely not homoiconic. Is it a lisp?
Maybe the only way to tell what is and isn't a lisp is though the vibes a language gives. In short, "I know it when I see it".