Command line processing is determined in a source code of the program that became a specific command.
More often than not, a bunch of commands use a specific command line processing library (GNU getargs, or in case of Perl scripts GetOpts::Long are examples of such), though whether the command line processing was hand-rolled or used any specific library is entirely dependent on the command.
Therefore the abilities of command line processing (e.g. support for reordering, use of
-- to delineate end of flags, folding of
-a -b into
-ab, etc...) depend entirely on the source code of individual apps and/or the libraries they use.
The specific pattern you noted is probably due to differing command line processing libraries (or individual hand-rolled arg processing code used by developers) between Linux with its GNU roots and OSX (IIRC, BSD origins but not sure)