Для предотвращения столкновений используйте автозагрузчик (см. spl_autoload_register
). Таким образом, если вы используете библиотеку совместно, и каждый из них использует автозагрузчик, конфликт имен классов (redeclare class fatal error) больше не будет происходить.
Это не решает проблему версии (например, иметь разные классы из одного и того же семейства, но с разными версиями).
Одним из простых решений (в сочетании с автозагрузчиком) является предложение библиотеки в качестве плагина. Каждый раз, когда библиотека получает обновление, обновляйте плагин. Плагин предлагает только автозагрузчик и классы.
Другие плагины, которые хотят использовать библиотеку, должны сделать вашу библиотеку-плагин зависимой, например. проверка его и указание пользователю установить его, если он недоступен, или просто установить его автоматически.
Если вы предложите пример плагина, который делает это для демонстрации (SDK), я думаю, что многие из библиотек, которые примут пользователи.