Setting up a staging frontend hooked into the same backend would be quite a lot of work, Discourse is easy to install and maintain because it’s all in a Docker container. Once you start messing with that, it immediately collapses into a real mess.
On the other hand, setting up a completely separate staging server is very easy. You just run another copy of the container on different ports then import a Discourse backup and whammo blammo you have another running instance. Discourse is very resource-hungry compared to stuff like Xenforo or vBulletin so they’d probably be out a couple bucks per month in hosting costs, but not like, over $10-20 at 2018 prices hosting somewhere like DigitalOcean or Linode.
None of that is strictly necessary for most cosmetic stuff, though, as recent versions added theming support and they could just develop against a separate theme that users aren’t permitted to select until they “push to production” by setting it as everybody’s default.