I understand your concern. 

But if we continue to use env variables, we have 2 problems:
* Portability: We remain dependent of shell, which is not portable. To say truth, I really dont like Windows, but I recognise that most systems are based on it (unfortunately the curse of 90% of market share remains true), in addition to some developers love Visual Studio that works only on it.
* Complexity not so useful: We will have to create a shell file setting variables only for 4 or 5 shell commands.    CMake creates env variables but only for runtime purpose, i.e. python files know where are swig modules and the python path.

BUT...........
we could simply add more 1 line such as:
export NUPIC=path/to/source

This way we would have:
  export NUPIC = /path/to/source
  mkdir $NUPIC/build_system
  cd ($NUPIC/build_system
  cmake $NUPIC

However, if we want Windows in a soon future, we would have port these same instructions to:
  set NUPIC /path/to/source
  mkdir %NUPIC%/build_system
  cd (%NUPIC%/build_system
  cmake %NUPIC%

In my opinion, this would increase complexity. I really dont know if the price is fair.. :-(