Это вытекающее следствие. Если вы создадите базовый класс с final полями, то их надо будет проинициализировать.
Поэтому есть красивый финт: 1) вы делаете приватное поле и объявляете его нулл 2) но оно не нуллабл по документации! Gson плевать на то что оно файнал, он легко его перепишет (рефлексия) 3) для получения этого поля пишется field get() = _field!! - это даст нам ненуллабл поле