If you think of functions as being "objects in memory that can be executed", you will grasp it easily. When you assign a function from one variable to another, all you are copying is the memory address location of that function from one variable to another.
If that variable is local, then calling such a function would be taking the local variable's pointer to the address of the function and executing it. If you are calling a global function, say print(), then what Lua really does is perform a table lookup on _G.print, getting the memory address stored in there and then executing it. Yes, _G._G is equal to _G. All global variables exist in the global table _G.
Obviously, having a local pointer to a function is much faster to call than requiring a global table lookup to obtain the pointer, which is the same speed as having a local table containing the pointer, since its still a table lookup.
So to answer your question, a function is only global if it exists in the _G table. A variable is considered global only if its in the _G table, meaning it can be accessed directly. You rarely need to do _G.print() to call the global version (just call print() directly) unless you have a local print() shadowing it by scope. As you can expect, you can overwrite global functions with your own.
Members of a table are neither global or local, they're just references to other things (functions, strings, more tables, whatever). Those other things may be global or local, but only when they are accessed by those other names.
The "local property", as you call it, is more to do with the name by which you access a thing than it is to do with the thing itself.