It is complex enough so that you won't be able to do it in the cart with rules. The cart rule would probably just charge the amount stored in a session variable and you would need custom code to loop through the cart and determine package sizes and rates and store the result in the session.
I think it makes sense to simplify it in any way that is acceptable to your client.