I never figured out why HT requires two completely separate register pools
HT doesn't require 2 (microarchitecture) register pools. It shares these lowest level registers. Each thread has its own mapping table of logical register to these registers.
Some special registers have to be duplicated though because they have specific purposes per thread.