No you can update it anywhere, but if you want to update it in another script, it must be through a reference (which you get from get_node() or $). Updating a copy of a variable does not update the original.
# Player
var speed = 12
# Enemy
var player_speed = get_node("Player").speed
print(player_speed) # prints 12
player_speed = 32
print(player_speed) # prints 32
print(get_node("Player").speed) # prints 12, original variable was not updated
get_node("Player").speed = 47
print(get_node("Player").speed) # prints 47, original variable was updated
print(player_speed) # prints 32, variable copy was not updated