Modifying argument of programmatically called render service. (e.g.: theme to use) = Get object from service container with modified argument
The mailsystem module is doing exactly what you are looking for I think. It has a configuration option to select which theme should be used to render mail templates.

See MailsystemManager::mail()

// Switch the theme to the configured mail theme.
$mail_theme = $this-&gt;getMailTheme();
$current_active_theme = $this-&gt;themeManager-&gt;getActiveTheme();
if ($mail_theme &amp;&amp; $mail_theme != $current_active_theme-&gt;getName()) {
  $this-&gt;themeManager-&gt;setActiveTheme($this-&gt;themeInitialization-&gt;initTheme($mail_theme));
}

try {
  $message = parent::mail($module, $key, $to, $langcode, $params, $reply, $send);
}
finally {
  // Revert the active theme, this is done inside a finally block so it is
  // executed even if an exception is thrown during sending a mail.
  if ($mail_theme != $current_active_theme-&gt;getName()) {
    $this-&gt;themeManager-&gt;setActiveTheme($current_active_theme);
  }
}
return $message;


}

You can't tell the renderer directly which theme to use. But, you can switch out the active theme before you call it an then switch it back (the try/finally is important, so that you don't end up with the wrong active theme in case of an exception).

The service names for the two used services is theme.manager and theme.initialization.