Transaction schedule
The simplest way to send and receive bitcoins programatically is to run the standard bitcoind client and have your software talk to it via the JSON-RPC interface.  You can give it commands to send coins, check for incoming transactions, and so on.

As for how to schedule transactions to be made at some future time: once you know how to make transactions via RPC, doing it at a scheduled future time is really just a general programming question and not within the scope of this site.  The most obvious approach would be a similar algorithm to Unix's crond(8): have a queue of pending jobs in chronological order, and sleep until it's time to execute the next one.  When a new job is scheduled, insert it at its proper place in the queue, and if it turns out to be first in the queue, recalculate the sleep time.

As for whether and how to use cold storage: that's something you'll have to determine.  Keeping the temporarily held coins in cold storage will reduce the risk of them being stolen by an attacker, but also adds extra costs since you will need a trusted human employee to manually transfer coins back out of cold storage at appropriate intervals.  You'll have to balance that against the risks and potential liabilities of having coins stolen.