First of all, you should use CODE tags (the # button in the forum) when posting code so that it's easier to read. Second, avoid using HALT. Use RETURN instead if you really need to. And you don't need to halt an IF when the only thing after it is an ELSE.
As for your questions...
When you add an event, the easiest method would be to just start some timers when creating the new event. Calculate ($calc) time between now and when 20/30 minutes prior to the event time and set a timer for that which will msg the channel. Then set one for 4 minutes after that and so on until the event start time. Again, that's the easiest method... it will mean a number of timers running, which isn't really a bad thing, but may not be the preferable method. You could also set a single timer that calls and alias which then runs a new timer for 4 minutes later that will call the alias again and so on. Then you only have a single timer running. A bit more complicated, but not too bad.
For the second one, again, just use a timer. Set it for 24 hours after the event and have the timer do what the -r does. The easiest way to do that would be to put that into an alias.