Как дать боту возможность одновременно ждать сообщения от пользователя и проверять время для запланированного вывода сообщения?
Для того чтобы планировать задачи для своего кода, нужен schedule
Пример:
import schedule
def primer():
      #func options
     schedule.every().day.at('8:00').do(primer)
     while True:
            schedule.run_pending()
            time.sleep(3)

Чтобы бот делал все как вы хотите, создайте два потока пример:
import threading
from threading import Thread
def thread2():
      thr2 = Thread(target=primer)
      thr2.start()

В конец кода добавьте:
if __name__ == '__main__':
    thread2()

Итог:
Функции которые вам нужны, будут выполнятся в основном потоке, а в потоке номер 2 будет выполнятся schedule.
Если я правильно понял вашу задумку, вам. нужно разделить эти два процесса.. бот ботом - отвечает на запросы, а отдельно по расписанию, с согласия пользователя или всем подряд, рассылает сообщения. Реализовать можно через cron например..
Т.е. есть скрипт бота отвечающего на запрос, а есть отдельный скрипт запускаемый "каждое утро" через cron и рассылающий сообщения