Gutenberg Additional CSS Class without modifying theme?

Depending on your goal, you can add custom CSS for blocks in several ways.

Theme

Adding it “themewide” by either using a theme’s Custom CSS area or creating a child theme could be used either to affect all copies of a particular type of block, or to target one type of block on just a single post. For example, each URL of a WP site should have a <body> class that specifies what type of content it is, and this gets fairly granular. Example: if there’s one Page you want to target, body.page-id-# targets that page, so you can isolate your CSS to only affect that Page. This is the most common way to apply block style changes, because as you mentioned everywhere you use that class, you can update it once in the theme and it affects all those places simultaneously.

Plugin

You could also write a plugin to enqueue CSS only in the places you need it. That could vary: you could enqueue it on all Pages, or on Categories, or on a single Post, whatever you need.

Or, if your theme doesn’t have a Custom CSS area, there are out-of-the-box plugins that will allow you to add your own CSS. You’d have to look into their capabilities to see whether it’s possible to restrict the CSS to certain areas, or if it’s like a theme change, sitewide.

Inline

Finally, you have identified the only option that would allow you to add inline CSS – using the HTML block. WP shies away from inline styles in most cases because of its modularity – typically if you change something in one place, it’s convenient to have it automatically update everywhere else, which classes do. Inline styles have to be updated individually.