Кстати, еще раз перечитал заголовок, и усматриваю довольно серьезное непонимание вещей. Ты сравниваешь вообще разные механизмы. Давай по порядку:
1. xPDO::loadClass() - это метод для подгрузки классов, при чем без разницы каких, xPDO-классов или нет.
Рассмотрим на примере: если нам нужно создать новый объект, к примеру $modx->newObject('modUser'), то для этого нам нужен класс modUser, то есть его надо подгрузить. Так вот, xPDO::loadClass($className) этим и занимается, и он автоматически вызывается внутри метода newObject() (как и других похожих методов, типа getObject(), getCollection() и т.п.).
2. xPDO::addPackage() нужен для того, чтобы подключить еще один пакет с классами, то есть еще одну директорию (как правило это директория модуля). Когда пакет подключен, то xPDO::loadClass() ищет во всех подключенных модулях, пока не найдет запрошенный класс (если, как писалось выше, третий параметр не установлен в значение true).
3. xPDO::addExtensionPackage() - это просто автоматическое подключение addPackage(), просто для удобства и автоматизации.
4. xPDO::getService() - вот это совсем другая песня. Для нее справедливо и все то, что перечислено выше (так как тоже используется метод loadClass(), и addPackage()(если надо, само собой еще до вызова метода getService())), но этот метод используется для расширения самого объекта $modx. К примеру, $modx->getService($alias, $class); В случае успеха будет доступен объект $modx->$alias, к примеру $modx->mail или $modx->error. И это совсем не для xPDO-классов.
Так понятней?