S-expressions are perhaps partly responsible as well. They don't suffer the same brittleness as regular programming languages (is there a word for non-s-expression languages like c/python/etc?).
I think so as well. When you have macros and can add syntax and features to a language at will, then the language and core library does not need to be very big. This probably helps immensely when trying to avoid breaking changes.
New macros can very well be prototyped and battle-hardened in external libraries before being added to core.
https://en.wikipedia.org/wiki/M-expression