Port register manipulation on the ATmega32u4 vs ATmega168/8

On the Leonardo/Micro, it seems like PD0 and PD1 don't correspond to RX and TX like on the Uno. Instead PD2 and PD3 now correspond to RX and TX.

On the Uno, the port manipulation code to set digital pins 2 -7 as output while leaving RX/TX untouched would be:

DDRD = DDRD | B11111100;  // sets pins 2 through 7 as outputs while leaving RX/TX untouched

However, on the Leonardo/Micro, the equivalent port manipulation code would now be:

DDRD = DDRD | B01010011;  // sets pins 2, 3, 4, and 6 as outputs while leaving RX/TX (PD2/PD3) and PD5/PD7 untouched
DDRC = DDRC | B01000000; // sets pin 5 (PC6) as output while leaving PC0-PC5 and PC7 untouched
DDRE = DDRE | B01000000; // sets pin 7 (PE6) as output while leaving PE0-PE5 and PE7 untouched

Am I correctly understanding port manipulation on the ATmega32u4?

Yes, lots of differences. I did not check every pin number and bit, but I think it is right.

Why do you need direct register writing ?
Just use the Arduino functions, they are made so you don't have to bother about this.