Create a button with an icon in render array, that can be themed by arbitrary contributed themes
You can create a custom HTML tag like this:

return [
  '#type' =&gt; 'html_tag',
  '#tag' =&gt; 'button',
  '#value' =&gt; 'whatever value...',
];


Another solution is to render a custom theme that creates the button, like:

return [
  '#theme' =&gt; 'your_template',
];


You can read more about rendering custom templates here.