You can get a node from another scene like this:
var node = get_node("/root/scene_main_node/node_wanted"),
var node = get_tree().get_root().get_node("scene_main_node/node_wanted"),
var tree_root = get_tree().get_root()
var node = tree_root.get_child( tree_root.get_child_count()-1 ).get_node("node_wanted")
(you get the last child because you might have autoload scripts loaded)
To call a function is as normally:
So in these cases you need to know the path to a node in another node. The best is to try to avoid this, as if the path changes, then the code breaks.
Also it becomes harder to test scenes in isolation, as the reference to the other scene node will be null.
So it might not be a bad idea idea to organize code in other ways. Like have a level manager (script) that access the nodes you need, and if the path of the nodes change you always node in which file to update the paths. And you can use signals to let the level manager know something happened in the nodes.
Edit: timoschwarzer answers's "
<path>" more accurate, as in my case it is assumed that the node you wanted was a child of another's scene main node.