The calendar view in Airtable isn’t really meant to be a super-robust calendar. Because the events it displays are tied to individual table fields, it’s going to be somewhat limited. To achieve what you want, there are two options I can think of.
One is similar to something that I do on my task list. I have what I call “scheduled” tasks that have fields where I can choose the frequency of the task:
I then use a formula to calculate when the next iteration of that task should be (using DATEADD), and use Integromat to update the due date automatically when any of these scheduled tasks are complete. In short, the task isn’t deleted after it’s complete, but gets “recycled” by having its due date automatically updated for the next time it’s needed.
You could set up something similar so that these yearly events are moved after they have passed. You would set up your table so that Integromat could easily find the recurring events using a daily search. If Integromat finds that a given event’s date has passed, it would add a year to that date. For example, say there’s an event on May 27, 2019. Once May 28th comes along, the Integromat scenario would change that event date to May 27, 2020. It would obviously disappear from your view of May 2019, and if that’s a problem, this might not be a viable solution.
If you want all dates—past and future—to always appear, you could do something similar, but have Integromat add a new record instead of editing an existing one.