Не все должно быть классом. Шаблон Singleton позволит вам превратить это в класс, но на самом деле он ничего не покупает по сравнению с глобальными функциями:
bool my_library_init();
void my_library_shutdown();
Первый вызов возвращает true, если библиотека была успешно инициализирована, второй просто тихо делает все, что нужно сделать, и завершается. За этими интерфейсами вы можете добавить любой тип подсчета ссылок или типа отслеживания потоков.
Кроме того, не забывайте о том, что ваша библиотека может делать все это прозрачным образом. Когда вызывается первая библиотечная функция, может ли она обнаружить, что она еще не инициализирована, и настроить все перед выполнением работы? Для отключения просто зарегистрируйте ресурсы, которые должны быть уничтожены, глобальным объектом, чтобы они уничтожались при выходе из программы. Делать это таким образом, безусловно, сложнее, но, возможно, стоит воспользоваться преимуществами удобства использования для тех, кто вызывает вашу библиотеку.