You can use paypal subscriptions for this easily.
Paypal website payments standard supports this, allowing you to accept visa, mc, paypal, amex as payment methods for your subscribers.
You cannot create a stored button for this, becuse the stored buttons are encrypted with a set amount or subscription profile.
You create a standard button.
Your application logic can programatically create the variables for the subscription. The price, recurrance, ect. So if your product is 20 per month, and the user gets an add on for 5 more then you create a subscribe button for $25.
This is easy to do with any server side scripting language. PHP libraries (plus others) are available for encrypting the button. Paypal calls this EWP. The encryption ensures that someone cannot modify the amounts outside of your subscription service and try to "hack the system". Its not necessary because you can monitor your paypal account to watch for "odd" subscription amounts.
Paypal will also notify you by email on new subscriptions, and can even talk to your server by a process they call IPN (instant payment notification)
The only drawbacks of using paypal are:
1. some people think it looks cheap
2. paypal stores the credit card info for your subscribers (this is good since you dont have to deal with pci compliance), its bad because you are locked in.
3. Paypal charges 2.9% plus a transaction fee each time there is a charge. this is very low compared to industry averages but can be a problem if you have 100k subscribers because then youd qualify for interchange plus pricing
4. user goes to paypal site briefly to create the subscription.
A more professional approach is to sign up for a real merchant account. Use an api for your gateway to program exact subscription rates, store your clients in a db, and bill them accordingly monthly using hte API