I've done this using the PayPal Website Payments Pro API. First you create an initial transaction and retain the ID. Then have a cron run whenever you want to process recurring transactions and process what they call a reference transaction. You pass it the last transaction ID and give it a new dollar value. It'll process another transaction with the same information.
Limitations on PayPal's reference transactions are they can't be older than 12 months from the last transaction and I believe the dollar cap is $10,000.