- Async... The Django way of doing things... Celery -> it's a background task system which is like bringing a bazooka to kill a fly for what you wanted to do (I assume proxying the request to an external API).
- database I/O and calling external services -> Use gunicorn gevent worker type that brings up the pseudo threads.
- JWT was poorly supported -> There's at least 5 battle tested libraries that you can use to implement JWT alone (simplejwt comes to mind first)
- the most popular auth library needed quite a bit of manual patching in code to make it all work -> Which one? There's few that are standard and most are easy to customize via global settings.
- Raw deployment on PaaS like Heroku and Elastic Beanstalk -> that's more on the platform rather than Django itself
- DRF -> I agree, DRF has it's own way of doing things and deviating from them can give you massive headaches.