Возможно ли сделать объектно-ориентированное API через DLL (GCC, C++)?
Можно. Для этого нужно написать обычную функцию типа:

extern "C" IPlugin * getPluginInterface()
{
    return new Plugin();
}


Если код для винды нужно еще добавить __declspec (dllexport) после extern «C».
И все. Теперь можно загрузить библиотеку динамически и спросить адрес функции по имени с помощью dlsym( для Linux ), для винды не помню.
Да точно также и делается всё. Делаем абстрактный класс, делаем фабрику этих самых классов, а она уже как хочет их создает и из любых либ.