У меня большое и старое приложение на Django. Используется баланс между двумя этими подходами: большая часть функциональности в одном большом приложении, разбита в пакетах по модулям, типа:
— big_app
— models
— profile.py
— content.py
— events.py
— forum.py
— views
— forum.py
— event.py
Часть вынесена в отдельные приложения, не понимаю зачем, ибо они все равно не могут использоваться повторно, так как слишком завязаны на специфику приложения и используют импорты из главного приложения. Но не я создавал эту структуру. Я бы, наверное, вместо этого добавлял бы модули в существующее большое приложение, а в отдельные приложения выносил бы только код, который можно использовать повторно (такого у нас немного, но есть).