multiple price sets?
The way we do it is to set up multiple price fields on one price set. The first price field you would make required, the second field wouldn't be required. Then people are required to select something from the first field, but then can choose what (if anything) they select from the second field.

We do it to have a required registration at the top, but then a textbook you can choose whether or not you purchase. You can have multiple items in each field, we just only have one in each.