Например, при использовании отражения.
Пример, что-то вроде этого:
object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
int sum = Convert.ToInt32(res);
стал бы:
dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);
Это большое улучшение, я думаю.
Но есть и другие предметы, где это может пригодиться. Например, при работе с COM-объектами взаимодействия это может пригодиться, посмотрите на:
http://www.devx.com/dotnet/Article/42590