Complex delayed unpublishing
Have a look at the rules scheduler module (part of the rules module). You should be able to do most of the things with date calculation and rules scheduler.

If you're missing something in rules you might have to implement your own rules action. Have a look at hook_rules_action_info().