Has anyone come up with a solution where matrix blocks can be scheduled and expire?
Yes you can definitely do this. The huge advantage of Craft is it's ability to customize nearly everything.

You can create a date field in your matrix block and check if the current date {{ now|date }} is lower than the date specified in the field.

If the condition is true, you'll display the matrix block if not you can either just hide it or you could create a plugin with a template variable  to delete the block. 

craft()-&gt;matrix-&gt;deleteBlockType($yourBlock);