I think Forth counts, in a "Turing-complete" sense of homoiconicity. A Forth program in a classic indirect threaded system can self-modify, reach in and change core interpreter words during execution. But it isn't obeying any formal soundness principle, since it's just a thin layer over the machine.
Compiled Forths might opt to wall off some of those options behind the compiler interface, in effect making the language slightly less far-reaching.
I could see that. Which I guess would put assembly into the homoiconic bucket. I think it fits the concept but sure isn’t the same as what people think of with Lisp, etc… lol.
Compiled Forths might opt to wall off some of those options behind the compiler interface, in effect making the language slightly less far-reaching.