Ну потому что эта имплементация рисования конкретного типа объектов может иметь специфичные приватные методы и данные.
И чтобы вот это всё не расползалось по "рисовальщику" и не превращало его в God-Object, можно "взять и поделить".
Вместо того, чтобы каждый раз допиливать "рисовальщик" и молиться, что всё будет отрисовываться правильно после этого, можно менять только точечно - тогда риск что-либо сломать намного меньше.
Ну "рисуемых" (хорошие) десятки, и. помимо draw (собсно рисования) они имеют еще пару виртуалов для "picking" (выборка) которые также завязаны на Engine (ну как бы тоже рисование но невидимое). Только посадить все это на pimpl - уже не день (и не 2) работы.
Положительная сторона такого подхода - независимость от "старого говнокода", это как бы "все переписать" для нового API. Не раз замечал что многие тянутся именно к этому решению, хотя по моим наблюдениям оно никогда не было хорошим, а часто и нереально.
Ну ладно, во всяком случае есть какое-то предложение, в такой ситуации это уже хорошо. Какие еще есть подходы?