The fact that 't can't be rebound is a bit ugly. Its only purpose is to be an arbitrary non-nil value. It doesn't need to be constant just to keep people from breaking things, just like 'car and 'cdr don't need to be constants.
The one rationale I can think of is that code might assume 't is bound to the symbol 't and use the symbol instead of the current value of the variable. However, that only makes a difference when checking whether something is 't, and things should generally be compared to nil instead.
As for rebinding nil, that's a bit worse. It's supposed to be considered identical to (), even on a reader level. In particular, (a b c) and (a b c . nil) are both (a . (b . (c . ()))), so the following are equivalent: