Neither of your choices are correct. 
You first choice attempts to use return to return a value from an asynchronous callback. It is generally not possible, and RequireJS is no different. See this question and its answers for why it is that way.
Your second choice puts a define inside a callback passed to require. This may work in some toy cases but in general this just won't work. (By "toy case" I mean proof-of-concepts where all conditions are under tight control. Such cases do not reflect the realities of real applications.)
Linh Pham's suggestion is really your option here:
define(["module", "B", "C"], function(module){
    var A;
    return A;
});
And if B depends on C and is not a AMD library, put a shim for it. In a comment you objected that you'd have to have "hundreds" of shims if you did this. You have a few options to avoid these shims:
- Do not load - Cwith RequireJS. Load it with a- scriptelement before RequireJS is loaded on your page.
 
- Design your application to be started with just one module and require that your application be started by loading - Cbefore anything else:
 - require(['C'], function () {
    require(['main']);
});
 - mainwould be the module that starts your application. The disadvantage of this method is that if you are like me, eventually, you are going to forget to require- Cbefore you require- main.