You can always define your own reusable form functions. It is a bit tedious to get started, but after you use the reusable functions a few times, you start to realize the efficiencies.
This is an approach that I'm currently using:
First, create function that allows me to override the rules in options (or any other list of rules). This will allow me to use while overriding existing options from other functions.
Clear[overrideRuleInList];
overrideRuleInList[rules_ : {Rule ...}, overrides_Association] :=
Join[Association[rules], overrides] // Normal;
overrideRuleInList[rules_ : {Rule ...}, overrides_ : {Rule ...}] :=
overrideRuleInList[rules, Association[overrides]];
overrideRuleInList[rules_ : {Rule ...}] := rules;
Second, define an alternate form function that uses a new set of default options.
Clear[sciForm];
Options[sciForm] = overrideRuleInList[
Options[ScientificForm],
<|NumberPadding -> {"", "0"}|>
];
sciForm[value_?NumericQ, opt : OptionsPattern[]] := ScientificForm[
value, {2, 1},
Sequence[overrideRuleInList[Options[sciForm], opt]]
];
While the above pattern works, it still feels a little bit like a hack. I'd love to hear how others in the community handle reusable utility functions like this.