One way to do this would be to have an OutgoingEmail table, and in that table store the date/time that the email should go out, the email address, subject, and body.
When the event is organized, generate the contents of the email and insert a record for each attendee with the current date/time. If the admin selects for a reminder to go out, also insert those emails with that future date/time. When the event changes, clear out any pending outgoing email records for that event, and insert records for an 'event changed' email (and if necessary, add new reminder emails with the updated details.)
Create your PHP script that will run from the crontab, and have it query any records in the OutgoingEmail table with date/times in the past. Loop through them using the PHP mail() function and delete them as you send them successfully.
Schedule it to run every 10 minutes or so, and you should code a routine to ensure that only one instance is running at a time. In the past I have created a 'lock' file, and the start of the script would check for the lock file. If the lock file exists, quit. If it does not exist, create it, process emails, and then remove the lock file.
Do you have more questions?