Они просто позволяют вам делать некоторые вещи, которые концептуально допустимы и формально приемлемы, но в настоящее время не разрешены из-за языковых ограничений. Например:
IEnumerable<int> ints = new List<int> { 1, 2, 3 };
Action<IEnumerable<object>> PrintThings =
x => { foreach(var thing in x) Console.WriteLine(thing); };
PrintThings(ints); // doesn't compile right now :( will compile in 4.0
Нет фундаментальной причины, почему это не может работать или не должно работать; это просто не допускается на языке. Позволяя ему, вы облегчаете жизнь программистам, когда такая операция была бы естественной для них.