I don't actually know why this is done, but one reason I can imagine is optimizing search and retrieval for the post metadata (date, author, etc.).
According to Joel (and Joel is always right! ;-) databases store their data in fixed-length fields composing fixed-length records, so it's easy to jump from one row to the next just by incrementing a pointer by the byte length of a record. But large text fields used to store post text can't have a fixed size, because the length of a post varies over a wide range and creating fixed-length storage large enough to hold all posts would waste tremendous amounts of space. That means storing the post text in the same table as the other information would make it a lot slower when you want to retrieve the metadata for large numbers of posts, as is done every time somebody views the main forum page.
The way to get the best of both worlds is to put the fixed-length fields (i.e. everything except the post text) in one table and the variable-length fields (i.e. the post text) in another.