В чём состоит отличие между CG-NAT и обычным NAT?
Это и есть обычный NAT/NAPT просто заточенный на большое количество трансляций и максимальную утилизацию выделенных пулов адресов и портов. Существует BCP127 он же RFC6888 где описаны рекомендации и требования к построению NAT на больших объёмах. Предполагается что надо максимально снизить время жизни сессии, но не больше чем надо и позволить операторам крутить другие важные штуки, в частности ограничение по трансляциям, выделение блоков портов за раз, лимитирование использование памяти. Ничего принципаильно отличающегося от "обычного" NAT в нём нет.

Ещё под это дело выделили целый 100.64.0.0/10 префикс, чтобы делать двойные трансляции и не пресекаться с другими провайдерами, если необходимо будет запириться напрямую, опять же чтобы не использовать публичные адреса.

Провайдеры не часто используют терминологию Symmetric, Cone/Full Cone, Address-Re.... CgNAT как и просто NAT будет Symmetric или Address-Restricted или Port-Restricted, в разных реализациях по разному. Возможность установить соединение на адрес NAT - не самое главное в NAТ для провайдеров ;), провайдеры для этого белые IP продают.
при CGNAT выполняется подмена не только ip адреса, но и порта источника. За счет этого более плотно используются имеющиеся пулы адресов и можно уместить большее к-во абонентов.