This complicated procedure is designed to allow the the login shell to be set up to behave differently to subsequent shells. And since environment variables only need to be initialised once at login, the behaviour of other shells can be changed by setting shell variables in .cshrc which is read each time a new shell is invoked.
Usually, you are are advised to set environment variables in your .login file and shell variables in your .cshrc. This arrangement prevents your environment being re-initialised every time a shell is started.
If you use a network windowing systems such as X, it is likely that you may start up a shell on a remote host which is not a login shell. If this is the case, any environment variables set in your .login on that host will not become part of your environment.
Puzzled? Don't be. The simplest solution is to set both environment and shell variables in your .cshrc or (.tcshrc ) file.