Má omluva je, že místo něj používám Typescript :-D
V tom vašem výčtu chybí dvě velmi důležité vlastnosti, které spolu volně souvisí:
1) Statické typy. Zrychlují vývoj tím, že odchytávají chyby už ve fázi kompilace, respektive s IDE už ve fázi psaní, umožňují napovídání v IDE (další zrychlení vývoje). Dělat větši refaktoring bez podpory typování musí být peklíčko. Atd.
2) Čitelnost. Pro projekty ve více lidech, případně (netriviální) takové, kdy se k programu vracíte po delší době opět kritická vlastnost. Samozřejmě jako člověk, který v LISPu nikdy pořádně nedělal mohu být zaujatý, ale ta výtka zaznívá hodně často, takže na ní něco bude. Jednak k tomu IMO moc nepřispívá prefixová notace. A pak ty závorky. Když si vezmu jednoduchý příklad z tutoriálu LISPu:
(defun fib (n)
"Return the nth Fibonacci number."
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 2)))))
Třeba v Typescriptu by to bylo nějak takhle:
// Return the nth Fibonacci number
const fib = (n: number) => n < 2 ? n : fib(n - 1) + fib(n - 2)
TS verze obsahuje troje (jednoduché) závorky. LISP jich má celkem devatero a navic dosahuje až pětinásobného vnoření (sic!)
Plus s jazyky jako / přístupem LISPu mám tu zkušenost, že jejich zápis je poměrně elegantní, dokud člověk implementuje něco, co je "čisté matematické" řešení. Jenže reálná zadání mají "chlupy", různé specialitky, zvláštní případy, takže kód se komplikuje, není zdaleka tak elegantní a tam jsou pak tyhle jazyky naopak méně čitelné. "Klasické algolské" jazyky jsou v těchhle případech tak nějak přímočařejší a tedy ve výsledku čitelnější. (Ale tohle těžko to nějak objektivně dokazovat, je to můj subjektivní dojem.)