A little "infile" Asynchronous Module Definition
I re-read your code several things, I can't say I would want to use it.


Requiring the parameters to be modules seems neat with 1 module or 2. For larger applications, that would become silly.
The most common use case with require is var xxx = load("Xxx") but you do not provide anything of the sort, in fact, load does not return anything
Having load being called in 2 different ways with 2 different ways of execution is wrong, I would suggest to simply use 2 different functions.
Consider rewriting the if block for "wrong usage" with falsey values and/or add some comment, it is pretty much unreadable now


At the very least I would modify the apply call to a call call, so that this has all the modules :

var ret = module.call(modules);

which makes for 

load('utils',[],function(){return {veryUseful:function(){alert('hey')}}});
load(['utils'],function(){this.utils.veryUseful()});


and return ret in case the caller wants to work with the module directly.