Of course there's more to it, depending on the app needs. In my case it also auto refreshes the contents on a js timer.
What UX regressions did you have in mind as troubling? Things like resetting one's password if forgotten? Well all those things need to be turned into their own ajax calls and php scripts as well and sometimes reworked to fit mobile users needs. For resetting passwords specifically I just copied what Twitch.com does.
- updating the URL state when someone clicks on a button
- proper back-button support in the browser that takes me back to the prior 'page'
- being able to navigate to any URL deep in your app and get a valid response (ideally rendered server-side so there's no client-side loading delay).
Things like these are hard, and the reason why it's common advice to use a framework and not hand roll. If you hand roll but don't support these things gracefully, you're making a case for not hand rolling.
It really just worked without much troubleshooting. Most trouble I've had was with cookies and cross-origin problems (or weird client requests).