In HTML5 you can change the URL:
window.history.pushState("object or string", "Title", "/new-url");
check http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
docs: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState().c2.a0method
UPDATE
An overview of which browser support the new HTML5 history API:
http://caniuse.com/#search=pushState (caniuse.com is worth to bookmark!)
there are already frameworks that do the hard work for you and even gracefully fallback to the common hash-tag solution:
History.js
History.js gracefully supports the HTML5 History/State APIs
  (pushState, replaceState, onPopState) in all browsers. Including
  continued support for data, titles, replaceState. Supports jQuery,
  MooTools and Prototype. For HTML5 browsers this means that you can
  modify the URL directly, without needing to use hashes anymore. For
  HTML4 browsers it will revert back to using the old onhashchange
  functionality.
Backbone.js
Backbone supplies structure to JavaScript-heavy applications by
  providing models with key-value binding and custom events, collections
  with a rich API of enumerable functions, views with declarative event
  handling, and connects it all to your existing application over a
  RESTful JSON interface.
  ...
  pushState support exists on a purely opt-in basis in Backbone. 
  Older browsers that don't support pushState will continue to use 
  hash-based URL fragments, and if a hash URL is visited by a 
  pushState-capable browser, it will be transparently upgraded to the true URL.
Mootools (via Plugin)
MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer. [...] History Management via popstate or hashchange. Replaces the URL of the page without a reload and falls back to Hashchange on older
  browsers.
dojo toolkit
Dojo saves you time and scales with your development process, using web standards as 
  its platform. It’s the toolkit experienced developers turn to for building high 
  quality desktop and mobile web applications. [...] dojox.app manage the navigation 
  history through HTML5 pushState standard and delegate it to browser enabled
  history management.
... just to name a few.
(!!) BE AWARE
One important side-effect when using the pushState (citation from the Backbone documentation):
Note that using real URLs requires your web server to be able to
  correctly render those pages, so back-end changes are required as
  well. For example, if you have a route of /documents/100, your web
  server must be able to serve that page, if the browser visits that URL
  directly. For full search-engine crawlability, it's best to have the
  server generate the complete HTML for the page ... but if it's a web
  application, just rendering the same content you would have for the
  root URL, and filling in the rest with Backbone Views and JavaScript
  works fine.