Как минимум код всех базовых объектов желательно держать в с++. Это нужно хотя бы для того, чтобы работать с объемом через с++ родительский тип и не грузить весь связанный контент из BP при обращении.
В основном максимум кода желательно держать в с++, потому что потом отлаживать только с++ проще, чем и то и то. BP чаще всего используется когда нужно что-то сделать с компонентами, которые есть только в BP или для переопределения методов, когда в виду архитектуры классов на c++ это сделать сложнее.
Некоторые вещи в принципе невозможно сделать на BP. Возможно не лучший пример, но кастомные редакторы ассетов или инструменты движка на BP не сделать.
Сам по себе BP прекрасно подходит для проектирования и мест, не требующих большого кода. На BP значительно проще работать с виджетами на уровне элементов, хотя обработка каких-то кнопочек скорее всего лучше сделать на c++.
Если обобщить, то BP лучше использовать там, где ввиду архитектуры классов сложно использовать c++. Например, нужно написать код для специфичного НПС, который унаследован от BP класса. Для всех других случаев c++.