1. Разделять таблицы на классы и защититься от путаницы при установке других систем в ту же базу (если поставить phpbb в эту же базу, то его таблицы будут например phpbb_**). И, кажется мне, что функции t3lib_db делают проверки на префиксы (в частности tx_, который зарезирвирован для таблиц пользовательских плагинов). В TSRef точно есть упоминание про такие проверки. Именно поэтому нельзя с помощью TS.CONTENT выбрать записи из be_users (недавно обсуждалось на форуме).
В общем для удобства.
2+3.
l18n - сокращение от английского варианта слова "интернализация".
t3ver - для версионности, воркспейсов.
cruser_id - id BE пользователя, который создал запись
И интернализация и вверсионность используют простое создание копий записи в то же таблице, но с другим содержанием. Эти дополнительные поля позволяют различить что это копии и привязать их к главной (родительской) записи.
Реализация поддержки интернализации в FE требует доработки кода плагинов.
На всякий случай:
http://www.slideshare.net/kfish/i18n-in-typo3-flow
4. mm = many to many. Одна новость может указывать на несколько категорий, и одна категория может относиться к нескольким новостям. Без промежуточной таблицы этого не сделать. В TYPO3 их обычно называют *_mm
5. Ядро точно не заставите видеть две базы. Это легко понять если глянуть код t3lib_db