Основное различие состоит в том, что клиент не может создавать экземпляры абстрактного типа с помощью процеруры NEW.

Соответственно, смотрите сами, имеет ли смысл их создавать. Если внутри или вокруг базового типа уже есть некий функционал, который позволяет его создать и осмысленно использовать, пусть этот базовый тип будет EXTENSIBLE. Если вы хотите запретить клиентам создавать экземпляры и хотите, например, чтобы всё создавание происходило внутри вашего модуля (для установки и поддержания каких-то инвариантов времени исполнения), то публикуйте только ABSTRACT тип, а конкретные расширения делайте непубличными. В последнем случае клиент тоже сможет создать свои расширения и передать вам в обход установки инвариантов, но ваши функции смогут их легко идентифицировать проверкой типа и пресечь их работу (трапнуть на предусловии, например).