You can explicitly limit the number of registers using the -maxrregcount compiler directive, however, it is not obvious that you should really do that. First of all, this directive will likely lead to the spilling of registers into the local memory which is slow (however, it is not a problem on Fermi). Second - maximal occupancy does not necessarily give the maximal speed of kernel execution, it is necessary to test how fast your code is depending on the level of occupancy.
Using only 8 registers, each multiprocessor could run at full occupancy if there were enough blocks to actually fill them, but there aren’t.
No, the compiler already optimizes the lifespan of variables independent of the scope of the variables in your code. So, just changing the names of variables does not help. But actual restructuring your code may help if it enables the optimizer to sufficiently reduce variable lifespan.