If your job has 3 steps, and in first step you are creating a dataset.
In the second step this file is the input file.You dont have to code the dsn name again. You can refer back to the dd name coded in first step using refer back. MAinly this is useful in case of temporary data sets which doesn't have a name to refer(DSN=,). In essence you are using refer back to point to the same dataset.
Overriding is used for totally a different purpose, probably exact opposite of refer back. assume you have a proc and separate run jcl.In the proc production dsn names are specified for which you don't have access.
If you don't want to edit the proc, you can override the prod file name with test file name using override from job card.In essence override is to use a different file name/parameter other than the pre-specified one.