@Sephsekla comment gave me the idea below, about how to add a tag in email template overriding the default stripping.
Not a nice technique but it works!
The first part of the solution is to include the part of the CSS code inside another tag (even if this tag is not valid) than 'style' to avoid stripping in the first place, like the example below:
<style-inline>
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(http://fontdomain-example.com/Montserrat-Regular.woff) format('woff');
}
</style-inline>
If we leave it as is then our code will be rendering in our email code.
So the next thing is to add a hook to 'woocommerce_mail_content' filter (with low priority in order to be the last filter to be run) replacing the 'style-inline' with 'style' string.
add_filter( 'woocommerce_mail_content', 'woocommerce_mail_content_callback', 9999 );
public function woocommerce_mail_content_callback($mail_content){
$mail_content = str_replace([
'<style-inline>',
'</style-inline>'
], [
'<style>',
'</style>'
], $mail_content);
return $mail_content;
}
The above technique worked for me allowing me add font-face successfully.