I CANNOT have this rule work at domain level as it could affect literally 1000s of legacy files and graphics that may have spaces or + symbols in them.
That's fine. You just need to constrain the original rule, in the main htaccess, to
RewriteCond %{THE_REQUEST} [+\ ]
RewriteRule ^directory/[^+\ ][+\ ] /fixup.php [L]
Use an opening anchor and then the exact directory path, up to the point where the relevant files are located. You can't use a <Directory> section in htaccess, so it has to be expressed as part of the path.
In most situations, adding a supplementary htaccess in the applicable directory
is the easiest fix. For example, if you're setting different auto-index options in one area, or you want a different expiration period for files in one directory. But mod_rewrite is different. Unlike almost everything else in Apache, it isn't inherited by default. So the existence of mod_rewrite in one directory will wipe out the results of any mod_rewrite activity in higher-level directories. You can say
RewriteOptions inherit
but then the rules will work in a weird bottom-to-top order and frankly it isn't worth it. At least not unless the rules are 100% mutually exclusive, where
nothing in the primary htaccess applies to the inner htaccess.
Final quirk: In general, RewriteRules that create redirects go before RewriteRules that are rewrites only. Here, the rule is superficially a rewrite-- but it will end up issuing a redirect. So you need to put it together with any other RewriteRules that create specific redirects. In other words, pretend that it has the [R=301] flag and locate it accordingly.