Calling properties of objects in python only works for current scene even when other scenes are defined?
Do not use bpy in BGE, it uses blender data that is not accesible while running the game.

But that's not the problem, that's just to avoid future problems. It's not possible to know exactly whats happening without the blend file but you can check the following list:


An object with name "obj2" exists in a scene with the name "hud".
Such object is present in a visible layer.
The scene with the name "hud" has been added as an overlay or underlay scene.
obj2 is not hidden.


Seeing the kind of error you've got it seems that the scene is there but the object isn't. You can print all the objects in the scene with print(hud.objects), that should help finding it. You can also print all inactive objects with print(hud.objectsInactive). If neither of them shows your object, it's probably hidden or unreachable by the game engine. You'll have to investigate what's wrong with it.

By the way, though it's true that you're defining a variable (and that is an object in Python), you are not defining an object (at last not in BGE). You're creating a varaiable that points to an already existing object, it would be more acurate to say that you are referencing an object. The same applies to scenes.