Right now widget plugins can specify in their annotation that they are 'multiple_values' (like: "don't repeat myself, on single copy can handle input of multiple values").
This is used for things like option widgets (checkboxes/radio, select) or the taxo autocomplete widget.
WidgetBase::form() uses this property to call formSingleElement() directly, or formMultipleElements() to "repeat N copies of the widget".
The not-too-nice thing is, the content of WidgetBase::submit() currently only really makes sense for stuff that went through formMultipleElements().
I'm thinking It would probably be cleaner to provide a separate MultipleWidgetBase base class for 'multiple' widgets, and get rid of the 'multiple_values' entry in the widget info. Widgets that are 'multiple' just extend from MultipleWidgetBase instead of WidgetBase.