This falls under the category of Good defaults vs Validation. What you do here depends a lot on the content you are managing.
So let's get straight to the cookies.
the user will select at least one item from the list, but can optionally select additional items
The user must select at least one item
Unless it's paramount for the user to think about the question and fill the answer (e.g. EULA agreement), you should pre-select a valid option and render a valid state, so the user is only left with the choice to optionally select additional items or complete the process.
At this point the component should have pre-filled and shouldn't allow an invalid empty state by selecting nothing (deselect all). In generic terms, just don't give the user the option to fail.
Optionally select additional items
This part is more functional than anything else. I'll give you a symbolic solution for the toppings example from your question, feel free to visually style it as you like.
Initial list of options
✔ No toppings (default)
+ Cheese
+ Tomatoes
+ Mozzarella
Once the user selects a topping, "no toppings" should get automatically de-selected.
No toppings
+ Cheese
✔ Tomatoes
+ Mozzarella
When the user deselects all the topping he previously chose, the default option should get selected again automatically.
On "No toppings" click, reset the selection and highlight default again.
last but not least, keeping an eye on the cognitive load helps keeping the design sane. So you don't go overboard with feedback messages or design convoluted
components just to avoid a couple of labels.
+ means addition, ✔ means selected, No toppings is special so has no + but has selection state ✔