Using container element in form widget
From WidgetBase::form:
// Most widgets need their internal structure preserved in submitted values.
$elements += ['#tree' =&gt; TRUE];

When customizing the structure you also need to make sure the values get submitted correctly. For example by adding WidgetInterface::massageFormValues to your widget.
A much easier way though is to keep the standard structure, which is using property names as form keys, and add the container by #prefix/#suffix:
$element['label'] = [
  '#type' =&gt; 'select',
  '#title' =&gt; t('Label'),
  '#default_value' =&gt; isset($items[$delta]-&gt;label) ? $items[$delta]-&gt;label : NULL,
  '#options' =&gt; $options_for_label,
  '#prefix' =&gt; '&lt;div class=&quot;my-item&quot;&gt;',
  '#suffix' =&gt; '&lt;/div&gt;',
];