Напишу свое мнение, не претендуя на правильность
1. Смысла во friend, в данном случае, я не вижу вообще. Чтобы классы подружить должна быть веская причина, например очень тесная интегрированность этих классов. А интерфейс и логику лучше максимально разделить.
2. Вызывать OnInitDialog ручками по-моему некузяво - это метод-реакция на событие и пусть таким и остается. Для инициализации и изменений есть открытые Create и UpdateData (это под MFC, но для всего остального есть аналоги). Если нужно что-то экзотическое, то лучше написать новый открытый метод (доступ к классу диалогу у тебя есть, иначе все равно friend'a не присобачишь), ну или в крайнем случае открытую обертку для OnInitDialog
3. Самый лучший, на мой взгляд, вариант: добавить в класс графа методы для получения данных и управлять графом и интерфейсом по отдельности из класса приложения или любого другого класса инкапсулирующего их или делегирующего им. В этом случае ты уже абсолютно свободен в выборе интерфейса и можешь диалог переделывать как тебе вздумается, или вообще организовать не Dialog Based интерфейс, при этом совершенно не трогая класс логики.