How do I execute a view in a custom module and print the output (as HTML markup)?
Views implements its own render element type (Drupal\views\Element\View), which you can use like so:

return [
  '#title' =&gt; 'Hello world',
  'view' =&gt; [
    '#type' =&gt; 'view',
    '#name' =&gt; 'myfirstview',
    '#display_id' =&gt; 'page_1',
    '#arguments' =&gt; ['foo', 'bar'],
    '#embed' =&gt; TRUE,
  ],
];


If you need to manipulate the View before rendering it, (you mentioned exposed filters), you can do that first and pass along the object:

$view = Views::getView('myfirstview');
$view-&gt;setFoo('bar');

return [
  '#type' =&gt; 'view',
  '#name' =&gt; 'myfirstview',
  '#view' =&gt; $view,
  '#display_id' =&gt; 'page_1',
  '#embed' =&gt; TRUE,
];