BigInteger никогда не переполнится, если у вас достаточно памяти для его обработки.
Чтобы ответить на ваш вопрос, почему мы допускаем переполнение одних типов, а не других:
BigInteger на самом деле не тип. Это класс. Это класс-оболочка, разработанный для того, чтобы предоставить вам ту же функциональность, что и int, но позволяет вам использовать числа настолько большого размера, насколько вам нужно, не беспокоясь о переполнении.
Типы переполняются, потому что они представляют собой просто пару байтов (точный объем зависит от типа) памяти, и, как только этот небольшой объем памяти переполняется, также поступают числа.
Нет класса "переполнения", если он специально не предназначен для этого (или если у вас закончились ресурсы). Класс определен с достаточным объемом памяти для всего, что он содержит, что в основном будет ссылками на другие классы или другие структуры данных.