Пространство имен - это высокоуровневая единица организации в .NET.
Объявление типов в классах обычно не одобряется (но, как и во всем, это не правило 100%), потому что это может сделать типы более тесно связанными и труднее найти.
Модули VB.NET являются чем-то вроде исключения ( edit : на самом деле это скорее трюк компилятора / синтаксический сахар), но обычно все в экосистеме .NET содержится в пространстве имен.
Ваш пример пригоден для повторного использования; если бы он находился внутри класса, это означало бы, что делегат должен использоваться только этим классом, и, вероятно, приведет к ненужному представлению дублирующих делегатов.
Обновление: при работе только с несколькими типами пространств имен кажется не слишком полезным, но без них проект любого размера был бы организационной катастрофой. Представьте себе .NET Framework без пространств имен, один (вероятно, давно устаревший) счетчик устанавливает для платформы 3500 типов.
Пространства имен похожи на папки или ящики для документов; с несколькими простыми бумагами легко работать, но если у вас много страниц, то найти нужную вам становится больно.
Прочитайте документацию, она короткая и не очень сложная (как и пространства имен), но имеет пару приличных точек MSDN - Пространство имен (c #)