pushState lets you rewrite the bits of the page you want to change using javascript, without reloading anything inessential.
Hashtags do the same thing, because technically, hashtagged urls (twitter/posts#1 vs twitter/posts#2) are on the same page. It's a way of changing the URL in the address bar without technically changing the page.