Indeed. The path can also be relative. If for example you script is in C:\nsis and the files are in C:\NSIS\files then you can use:
File files\blah.txt. You can also use !cd to change the directory in which the compiler will look for files.
$INSTDIR is defined as follows:
If InstallDirRegKey is defined, and the value was found in the registry $INSTDIR will be initiated as this value. If it wasn't found, or wasn't defined InstallDir's value will be used. Later, after the directory selection page (if present) $INSTDIR will be set to whatever the user chose. You can change $INSTDIR anytime in between using StrCpy or any other command that accepts an output variable.
SetOutPath sets the path in which the installer will extract files. That means that if you use (and also creates it):
then blah.txt will be extracted to $INSTDIR.