I'm not sure how to set up an optional fee, but for required fees, this module will do it:
https://drupal.org/project/uc_fee
Unfortunately there seems to be no version for Drupal 7 yet.
Also, it's a little quirky in some ways...for example, if you want to create a fee to be applied to all products of a particular class, by default that fee gets applied at the cart level, meaning that that a long as the cart contains at least one product of the type you specified when creating the conditional action, the fee will be applied to the other products in the cart as well. If the fee only should be applied once per order then you can just set Max Applications to zero, otherwise...
The process to apply a fee to each product in the cart of a particular class is as follows:
- Create a fee at Store administration > Fees with a price of zero
- Click the "conditions" link next to the fee (again, from Store administration > Fees) and say the cart needs to contain at least one product of your desired class
- Go to Store administration > Products > Manage classes, click "edit" for your desired class, go to the Fees tab and override the price to be whatever the fee should be.
- Create products of that class. If your products are already created, it appears you need to edit each already-existing product and override the fee there (on the Fees tab); unfortunately the product-class override only appears to apply to products created after the setting was changed.