Display events by categories for current year, and past 3 years
I can't think of an existing way to "auto-thing" this, unfortunately. I think you may need to contract a CiviCRM partner to develop some custom code for you, or perhaps reach out to the maintainer of the CiviEvent Widget and see if they're willing to take feature requests. (I suspect they'll want to be compensated for that.)