I found a solution for the problem. The problem only really only really exists in the browserified versions of the libraries where each library gets compiled into its own file with its own loader etc. When using "real" AMD where all files that are being used are registered with the same loader the problem doesn't exist because all files see all registered exports and can imply require each other. So I changed the extension libraries to use regular AMD requires and only updated the browserified versions so that they include "fake" AMD definitions for components that they depend on, e.g.:
define('ember-simple-auth/stores/base', ['exports'], function(__exports__) {
__exports__.Base = global.Ember.SimpleAuth.Stores.Base;
});
That way I can use clean AMD requires all over the place and still have the browserified versions working. I don't think that solution is too ugly but I'd be interested in feedback of course!