I know I can do it by adding a CSS class under ‘Advanced’ but it’s not ideal for non-technical content editors.
That sounds exactly like a block style, which is essentially the GUI version of this. You can assign a block style from the block inspectors style tab, the toolbar, or the inserter, and it adds a CSS class you can target. In some cases you can even style it entirely via the site editor.
The more advanced version of this would be block variants which lets you create a “variant” of the block that looks like a new block that has its own icon/title/etc but with specific attributes. An example of this is the embed block, which has youtube/vimeo/etc block variants that all appear to be independent blocks to the user, but are actually variants of the core embed block.
How To Register a Block Style
By calling the register_block_style PHP function:
register_block_style(
'core/paragraph',
[
'name' => 'super-wide',
'label' => __( 'Super Wide', 'textdomain' ),
]
);
There are other parameters that give you more control but they’re covered in the official docs:
https://developer.wordpress.org/reference/functions/register_block_style/
Is The Approach You Asked About Really The Best Practice Though?
Note though that most of the examples you gave are not appropriate for a block style, and have a much better solution, e.g. alignment and width are much better handled by composition, aka group/row/stack blocks and their built in width/flex/grid/alignment controls.
You may find that a block pattern with these preconfigured is more useful and flexible, and can be created entirely within the GUI with zero code written via synced patterns.
In general, any time you need to extend a core block, this heavily implies you’re taking a super difficult route inspired by classic theme building, when a super easy alternative is present.