Custom wrapper field
What you are looking for are "theme wrappers" ... this allows you to create a theme function (or tpl) to use to wrap a form element (or any element in a render array).

There is a good write-up here: https://guusvandewal.nl/drupal-blog/theme-wrappers-drupal-forms

Its for drupal 7 but not much has changed with theme wrappers in Drupal 8