I think one way you could do this would be to create a new calculated column that will be a total price for shippable items. You would need to have a column in the cart that would indicate if an item were shippable then create the calculated column based on the value that is present in this shippable column. Then in your charge rule you will use the subtotal of this new calculated column rather than the sub total for the entire cart.
I know this is lite on specifics so please post back with any questions that you have or if you just need some more detail for any part of this.