Fetching here means obtaining and memorizing reference to the real object. Reference is like a phone contact of an object,variable or function. When You store reference in some variable, like
var home = get_node("./home")
,than You can use it to make calls to referred node, order it around, but changing this variable will not change node itself, it will only change this "phone contact". For example:
home.postion = Vector2(0,0)
These will work, real node will be queued free or its position will change. But:
home = get_node("work")
will not transform node "home" into node "work", it will change variable home to address "work" instead of "home"
In Godot there are certain variable types that are always a reference instead of real value. All objects, arrays and dictionaries are like this. So You don't really have choice with getnode() :). $ is exactly the same thing as getnode(). The only difference is that getnode utilizes a String, so You can use some constructed String value to dynamically create path for getnode. For example :
var bullet = "bullet"
get_node("./" + bullet).speed = 100