> PushState, for example, is not a bandaid, and for those not-so-modern browsers there are hashtags (let's be frank: 99.9% of users don't care about how beautiful or ugly their URIs are and even less about one particular character).
Keep in mind that using the history API (push|replace)State is not so much about making the URL pretty as it is about page refresh semantics.
With a hashtag the page refresh loading the correct content requires at least one more trip to the server to load the content represented by the hash and relies completely on your JavaScript not breaking.
With a url "fixed" by (push|replace)State the server can respond directly with the content speeding up the response time and removing a point of failure.