These days I write JavaScript using only functions, literals, variables, and the occasional prototype and it's amazing.
I think many programmers have a desire to believe they are working on complex problems that demand sophisticated tools. I remember learning Ruby and being excited whenever I found a reason to write a DSL. In retrospect it was unnecessary every time. In every case the code would've been clearer if I had just stuck with functions and kept refactoring until I had the right interfaces and data structures.
It helps to remember
function a() {
b(function() {
//etc
})
}
is equivalent to function a() {
b(c)
}
function c() {
//etc
}
which is not particularly more verbose. And as a side benefit, refactoring that way gives you an opportunity to make c() self-documenting.