The first example actually has more bracket pairs (7) for Javascript than for Lisp (6). Rainbow bracket modes for editors can help when bracket matching is an issue.
This example which suggests counting parens is also solved by rainbow brackets, and/or editor tooling like paredit-mode that won't even let you type mismatched brackets:
(f (g (h (i (j)))))
And in most modern Lisps, one might use a thread/pipeline macro instead:
(-> (j) i h g f)
With mixed nesting, Lisp programmers often use newlines to improve clarity:
(aap noot ((mies wim) zus) (jet teun vuur))
becomes
(aap noot
((mies wim) zus)
(jet teun vuur))
A later example in the post does that:
(sum
(filter
(split (read (open "input.txt")
",")
(lambda (it) (> it 0)))
Which makes one of the errors it contains clear: "," should be an argument to split, but here it is an argument to read. It is aligned with the start of the first argument to read, so that's very visible. There are also two levels of unclosed parens. Pasting it into an editor made that clear instantly.
This version is correct:
(sum
(filter
(split (read (open "input.txt"))
","))
(lambda (it) (> it 0)))
But I'd probably write this with a thread macro:
(-> (open "input.txt")
read
(split ",")
(filter (lambda (it) (> it 0))))
It's possible to write unreadable Lisp, but people who are good at Lisp don't. This is true of most languages.
I will never not post this picture on this subject. Skimmed through the article, seems well written and will read it later.