Use ajax for portions of the page that needs to update, not the entire thing. For that you should use templates.
When you want to still preserve the back button for your various state changes on the page, combine them with # achors to alter the url (without forcing the browser to issue another GET).
For example, gmail’s looks like this:
mail.google.com/#inbox/message-1234
everything past the # was a page state change that happened via ajax. If I press Back, I’ll go to the inbox again (again, without another browser GET)