The high level view of "using fewer registers" and putting data in "unallocated" registers is that it cannot obfuscate anything.
I got into this conversation with a friend, and he suggested modifying the compiler to use fewer registers, preserving "important stuff" in those newly unallocated registers. It's a very heavy-handed way to go about it, will lead to serious repercussions in performance, and still isn't fool-proof, but it's damned hard to get around because it requires a lot of inside knowledge to know what gnarly asm to inject.
Using "fewer registers" doesn't make any sense. First of all, that means more stuff will be spilled to stack memory, where it's actually easier to find and modify. Secondly, it's going to be transiently limited to the runtime of a single function at most, so those values still have to go back to stack or free-store memory at some point. Finally, on platforms like x86-32, there's already so few registers available that this is just... not smart to try.
The same data is read and written in arbitrary memory location and registers of your choice using exactly the same instructions. Compare these two x86 code fragments:
MOV EBX, EAX
ADD EBX, ECX
MOV EDX, EAX
ADD EDX, EBX
Which one is harder to comprehend and hack?