How to prevent the scheduling of the same event on the same day

Personally, I would have just one (WordPress) cron event that fired daily. All queued emails are stored in a table/option.

Now all you do in your cron handler is grab the next email in the queue, process it, and then delete it. There. One email a day.

You could have the option in the UI that allows users to schedule emails to set a priority, so that it can either be prepended/appended/inserted into the queue.