How set a time type field programmatically?
The form element property #type refers to an element type, not a HTML element. It is okay to define your own element types (or theme types), and you can provide your own markup for it. This can be done by implementing a RenderElement plugin.

Update:

You can also use the datetime render element and disable the date portion.

$element['#date_date_element'] = 'none';

Update 2:

The comment form has an example of a render array that uses the datetime type. So given that as a guideline,

  $form['time_without_date'] = array(
    '#type' =&gt; 'datetime',
    '#title' =&gt; $this-&gt;t('Time without date'),
    // HTML 5 time element format can be H:i
    '#default_value' =&gt; DrupalDateTime::createFromFormat('Y-m-d H:i:s', '1970-01-01 20:00', 'UTC'),
    '#size' =&gt; 20,
    '#date_date_element' =&gt; 'none',
    // This sets html 5 time element use explicitly, probably not necessary.
    '#date_time_element' =&gt; 'time',
  );