As the author I'm slightly biased but you could try http://davisjs.com It is a routing library that is based around pushState, although you can use hash based routing, or any thing else via extensions.
I'm not sure what features exactly that you want but Davis is full-featured, and gives you hooks into the internals so you can modify its behaviour anyway you want.