I know that you could use System.Object instead of variant. That would be the same, but adding generics to .NET 2.0 was the right decission. It finally took that away from us. It makes the code so much easier to read.
As said: I'm not against dynamic mechanism at all! What do you exactly want more dynamic and how should it look like. I think that you should specify exactly what you want, instead of just calling for a more dynamic language!