I think Frunple did a pretty good job, but I would add "without programming changes"...
For example: I have a "Go To Bed" button which, arms the security system, turns off all the lights in the common areas of the house and sets the thermostat temperature to a predefined value.
Prior to User Settings, if I wanted to change the sleep temperature I had to edit the program. My wife doesn't know how to do this, and it was a bit of a pain. Now instead of the programming having a hard coded value, I use a User Setting called "Sleep Temp". My wife can easily change this from any console or touch screen by going to Setup > User Setting, tapping Sleep Temp and selecting Change. It's so easy a caveman can do it...
User setting can be used to replace just about any constant value. I use them for several things...
NOTE: The selectors used in programming are smart and will only show user settings of the appropriate type. So if you have no "Time" user settings the Time selector will not show user settings as an option.