В приложении должна быть реализована поддержка плагинов.
например в С/C++ возможна динамическая подгрузка модулей. тоесть, к примеру, нужно положить скомпилированную библиотеку в папку с планинами, а приложение будет загружать их оттуда приблизительно так: проходит по всем либам в папке, загружает их и запускает определенны метод/ф-ию из этой библиотеки (как писал
GavriKos - таким макаром плагин реализует некий интерфейс) - этот метод/ф-ия являет точкой входа для плагина
другие приложения, тот же WoW, используют интерпретируемые языки для написания плагинов. в этом случае этот язык дергает API-функции скомпиленого приложения (ядра). кстати, ярким примером является NodeJS. там ядро написано на C, а работа с этим ядром идет уже на языке JavaScript. к примеру, мы хотим записать в файл, мы вызываем ф-ию fs.write, эта ф-ия запускает ф-ию ядра, которая уже записывает это дело в файл и после записи вызывает коллбек. приблизительно так же реализованы интерфейсные расширения в WoW
в голову приходит еще один вариант: паттерн
Интерпретатор. еси коротко, то суть в том, что пользователь пишет некую лексическую конструкцию по некоторым правилам, а приложение разбирает эту конструкцию и делает выводи что нужно сделать. это тоже своего рода плагин.