When someone uses the remove(), find(), parent(), parents(), siblings(), not(), filter(), or add() core methods, those methods push the previous node list onto the .stack property. Chaining several of these methods will push several node lists onto the stack. The user can retrieve those nodes using the end() method, but has no simple way to retain the .cur nodes but dump the stack. This may cause memory leaks in general usage, because many users will not be aware of the stacking. For example, this sets a variable in global scope:
exts = $("a").css(fontWeight: "bold").find("[rel='external']"].css(color, "red");
The jQuery object exts ends up with a pushed nodelist of all anchor objects that the user probably doesn't want, but they did want to keep the rel=external links.
I like the stack functionality, but not when it's inside core methods. I would suggest taking out the "hidden" pushStack() calls in the core, renaming pushStack/end to something symmetrical like jpush/jpop, and letting the user explicitly decide when to push or pop the stack in situations where they know the want to keep the nodes before doing further filtering or unhooking them from the DOM tree.
A small performance issue as well, I know that shift/unshift is much more expensive than push/pop for maintaining an array stack in IE Javascript. Given that the stack depth will be shallow it doesn't make much difference, but push/pop is shorter to type too. :)