Ok, so we have the event set up as normal, and we have a folder for the suppers. The suppers have their own on-sale rule that makes them on-sale but not browsable or searchable, so they can only be found with the package. There is a shortcut in the event folder to the relevant supper, which means that the supper inherits its performance data from the event:
There is a simple upsell package which requires one item from the "supper" selection and one from the "Events for which supper is available selection" and prompts to add the supper:
The Supper product is set to REQUIRE the supper package, and can't be sold without it: if you remove the ticket from the basket, the supper will be removed too*:
This means that when you add the event tickets to the basket you get the upsell prompt from the package:
and if I click that, two suppers are added:
and in the checkout process, the Food preference form is displayed to pick up dietary requirements:
/ * Actually I've just tested this and what it does is tries to COMPLETE the package, which means that the tickets get re-added by the package when you try to delete them. Not sure if that's right.