Как правильно организовать работу длительных запланированных задач?
Celery, RQ и т.п.
Если хотите именно Фласк, или иной фреймворк с WSGI-интерфейсом -  у вас два пути.
1) Упороться с Celery, который нереально монструозен и в ряде случаев приводит к неизбежной кастомизации "под себя". Сюда же RabbitMQ или иной брокер очередей. СУБД для хранения результатов и статусов работы.
2) Пишите ещё одно независимое приложение "рядом": Взамен Celery сделайте что-нибудь своё, но попроще. Асинхронное или многопоточное, если для нужд самообучения - можно и такое и такое. Но тут снова транспорт сообщений, RabbitMQ или иной брокер.
Если на Фласке свет клином не сошёлся - можно сразу взять Tornado или AsyncIO и сделать "два в одном". Отдача веб-контента не будет сильно мешать асинхронной работе с серверами. В этом случае будет всё внутри одного сервера. Вопрос масштабируемости здесь оставим за рамками, вам пока оно ни к чему заморачиваться.
P.S. Поищите на ютубе доклады Романа Иманкулова, он очень хорошо излагает на тему своих "велосипедов" взамен Celery, etc.