Hi -
When you commit your finalized changes to Staging (check-in), our Submit Wizard prompts you for an Expiration Date. You can set a global expiration date for all assets contained within your submission package, and then you can update each asset individually to override the default or remove the expiration date entirely.
When content expires, a change request is assigned to the user, who can determine whether the content should be deleted or refreshed. We do not presume to know whether or not the content should be deleted; our out-of-the-box workflow makes this an editorial decision (of course, you can do whatever else you want here. We do recommend this as a best practice, though).
If you either delete or update the content and submit your finalized change request, after whatever approvals you've configured, you will have a new snapshot committed to Staging that you can then deploy to your live environment. In the simplest case, that new Staging snapshot might only be defined as a single change to the site, a deletion of a single asset.
Try walking through this in the GUI. Please note that the expiration job is scheduled in our schedule-jobs-config.xml Spring config file and by default runs at 3:30am (you'll see this when you look at the config file). If you are testing content expiration, I recommend on a test system to change this default to something that supports a bit more rapid dev and test - for example, changing this to run every 5 minutes or so.
Kevin