Because it's for all intents and purposes a pointer based nodelist, not an array. A more complete implementation each element would have more properties. The parent queue would have 'first' and 'last', whilst each sub-node would have 'previous' and 'next'. Same as how HTML elements on the DOM have firstChild, lastChild, previousSibling, and nextSibling.
With a pointered list you can just point to the last one, pull it's previous sibling, unset it, set that previous sibling's "next" to null and set "last' to that sibling.
Whilst JavaScript arrays do not actively track the last item -- or any indexes really. That's part of why JavaScript arrays are so AGONIZINGLY slow is that on every access MOST engines walk the entire list of pointers just to find the index you are after, hence the longer the array the longer the operation takes.
A problem we wouldn't have if JavaScript had typecasting and didn't automatically re-order the arrays if you unset a middle index.
... and why the new typed arrays are much, MUCH faster at this sort of thing.