I am fairly sure the separation is needed, unless you can point to documentation somewhere that says the values used to initialize a hash will always be evaluated left-to-right. Otherwise, your code may work now, but is relying on undefined behavior and may stop working in a future version of perl.
The problem is that _export_private modifies @EXPORT_OK, so the order in which [@EXPORT_OK] and _export_private() are evaluated matters. If the list values are evaluated right-to-left in some future version of perl, you will be right back where you were, as the internal functions will be added to @EXPORT_OK just before the array is copied for the :all tag.