Behaviour of Resources.Load when object is a GameObject

I'm a little unclear as to what exactly is being returned by a line like the one below:

GameObject obj = Resources.Load("path/to/prefab", typeof(GameObject)) as GameObject;

The object that is returned seems to be a fully fledged GameObject, just as though it had been Instantiate()d in the scene. I can GetComponent() on it, and I can access properties and call functions on those components. However, the object itself is never actually in the scene.

What, precisely is this object that's been returned? It seems to be placed into a limbo state such that it will never be Start()ed, Awake()d or Update()d, but is otherwise a fully operational GO.

You might, reasonably, ask why I care since this object never actually interacts with the scene in any way. The reason is that some frontend code we have Load()s several prefabs in this way (without Instantiating them in to the scene) and uses metadata on their components to build menus. This works in the editor, but seems to fail in a build player.

If you use Resources.Load, the GameObject is loaded, but not instantiated in the scene. This means that its constructor will be called, and the constructor will call any method within, but Unity's methods will not be called (Update etc. are called only if you actually instantiate the GameObject).

To instantiate the loaded GameObject in the scene, an additional Instantiate operation should be applied (additional position and rotation parameters are available):

Instantiate( obj );