I think that you can write a reasonable lisp entirely without quasiquote.
There are three pieces that you need:
- Functions can appear literally in the AST (à la Janet and Common Lisp)
- Macros can appear literally in the AST, and specifically they have to have a different runtime representation than functions
- Special forms are their own thing explained below
Basically when you're writing Janet-style macros, you can/should unquote pretty much every symbol in order to do lexical lookup at the macro-definition at compile time, rather than the call-site at runtime: