You can do what you want with MODX. It's just easier to work on the production site because you CAN hide what you're doing and make it very simple to implement as needed with the chunks you develop.
If you want to work locally, you can do a mySQL dump into a local site, work it and then upload to the live site. It's just a little more work and you'll need to edit the config files any time you move the db. Also, if you develop on the production site there's less chance of some kind of conflict, say... php versioning.
When I say template, I don't mean the entire site. I just mean the template that you're using. The easiest way to template in MODX (IMO) is to use chunks. So say you want to change the head, your template would contain something like this:
[[$templateHeader]]
[[$siteBasicPage]]
[[$templateFooter]]
Where each chunk can be a static resource html file (for ease of editing).
In the template header, stick all the stuff prior to the body markup. In the site basic page stick your innards, and include the [[*content]] tag where you want it to be inside the markup. In the template footer, plunk your footer stuffs in.
When you want to develop this template, create a new duplicate. Duplicate the chunks (let's prefix them with dev. i.e. [[$devTemplateHeader]], etc.) and change the template chunk calls to reflect new names. Now you have a completely independent version of your current template. Create a new dev resource, associate the new template, and hide the resource from menus. Develop away. When you're done, either change the existing template calls to reflect new chunks, or paste your new chunk innards into the old head, page, and footer chunks. Done!
This is just one way to do it. The beauty of MODX is all the different ways to do the same thing.
:~}