There's not much of a custom DSL problem, because APL/K emphasize using the primitives that are built in, and user-defined functions will have names not symbols. Some codebases will be a challenge to read because these languages tend to attract programmers who write things their own way, and for K in particular many users—the inventor Arthur Whitney most of all—don't like to write long explanations of how their code works. The OP, while well explained, is pretty advanced material. Knowing a lot about array programming makes the high-level picture clear but I would say many of the code examples would take some effort for even a good array programmer to understand.
Would be curious to hear from someone's that's used both
The quote by Alan Perlis, 'It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures.' is also relevant to both lisp dialects and array languages.
I guess Clojure takes things a step further. It goes from "everything is a list" to something slightly broader with Vectors/Maps/Sets/etc. - all through language primitives. (the algorithmic layer is cleverly done through the sequence abstraction)
Coming from C++, in effect having your STL containers/algos baked into the language is a breath of fresh air :)
If anything, K is the opposite of a language where everyone disappears into DSLs- you can write expressive code without wrapping it in custom abstractions. An anti-lisp, if you will. It's not uncommon for K programmers playing with a puzzle to independently arrive at character-for-character identical solutions.
"ugh why can't this sort() just give me a grade instead?"
"why does this provide reduce(), but no scan?"
"this would be so much cleaner if I had transpose, or even just laminate..."
Don't know DSL ability, though aware someone wrote expanders from symbols to words, - imagine DSL doable but forth, lisp macros spring to mind first in the DSL space