There shouldn't be a problem here. If you had your shared migration in a plugin, the engines plugin provides the "script/generate plugin_migration" command to perform these migrations *at whatever point your application is currently at*.
In practice, this means that in App_1, you might end up with RAILS_ROOT/db/migrate/002_migrate_shared_plugin_to_version_1.rb, and in App_2 you may get RAILS_ROOT/db/migrate/ 152_migrate_shared_plugin_to_version_1.rb, but of which should run fine (presuming that your shared migration doesn't depend on anything in the current DB state).
I think the misunderstanding is here: "I can call a command to append all the migrations in the engine onto the migrations already in db/ migrations folder." The migrations from the plugin are never appended, copied or moved. Instead, they are called in a single command within the RAILS_ROOT/db/migrate generated migration:
Rails.plugins[:shared_plugin].migrate(5)
...which would run all of the migrations (up to version 5, in this case, but normally this is just the latest version) in the plugin dynamically.
HTH
James