мне вот начинает казаться что движек это интерфейс. реализация (бинарник библиотеки) - дело вторичное.
так, к примеру если есть код (условно)
SetColor(CL_RED);
DrawRect(ScreenX() * 0.25, ScreenY() *0.25, ScreenX() * 0.75, ScreenY() * 0.75);
он, например, рисует красный квадрат в середине экрана.
так вот, каким образом он его рисует, на какой системе, на каком экране - это все неважно. именоваться (и считаться движком) должен интерфейс (в данном, простом случае, набор из двух комманд, и одной константы
)
кстати, движек это еще и клевый тулсет, экспортеры для редакторов, конверторы в движковый формат ресурсов и прочее, прочее.
извиняюсь за некую сумбурность мыслей, чуть позже я обязательно приведу их в порядок, и смогу их предоставить в более понятном и полном виде.