I was thinking about this and came to the conclusion that I'd want to define some events per date, like you illustrated (`"12:30 dentist" > /cal/2024/08/04`), but others I'd like to define per event, like `2024-08-23 12:30 > /cal/massage`, which seemed messy. I didn't really resolve this question for myself.
I wasn't considering making it a virtual filesystem. My main goal was something that's editable with any text editor and syncable with SyncThing. I guess denormalization doesn't necessarily mean that these requirements are not met.