All day events start at 4:00 and end at 20:00. Some people would expect them to start at 0:00 and end at 23:59. They start at 4:00 am because of problems with different timezones. The 4 houres are only relevant in the USA and do not apply to the rest of the world.
The default alarm option for all day events are x days befor the event. This was not so much a problem in times where mobile synchronisation had not the impact than it has today. So if you synchronize your calendar via Lotus Traveler to a smart phone the phone will bring up the alarm at 4:00 am where most people sleep. This happens not only on all day events, anniversaries are also effected.
The start and end of work day can be configured in the users mail/calendar preferences. so why not take this configured time for the start and endtime of an all day event (anniversary and so on). In schedulers the time before and after the start and end of work day is marked as unavailable and the time between would then be blocked by the event. Also the default alarm settings would bring up the alarm to humane times.