O C # permite especificar parâmetros de propriedade entre chaves quando o objeto é inicializado. Isso permite escolher quais itens inicializar e quais deixar como padrão.
Um construtor, por outro lado, executa um único bloco de código com um conjunto fixo de parâmetros. Portanto, para obter o mesmo efeito, seria necessário criar vários construtores, todos com as várias combinações de propriedades que você deseja inicializar, o que pode ser entediante.
var x = new Person {FirstName="Homer",LastName="Simpson",Age=47};
é exatamente equivalente a isso:
var x = new Person();
x.FirstName="Homer";
x.LastName="Simpson";
x.Age=47;
Só que é mais curto e mais fácil para os olhos.
Ele também permite construções como você demonstrou na sua pergunta, o que seria muito tedioso se você tivesse que criar variáveis temporárias e inicializá-las como fiz aqui antes de adicioná-las à lista. (É assim que você costumava fazer isso.) Tudo isso sem exigir um construtor definido explicitamente que leva a lista de parâmetros desejada, que pode ou não estar disponível.
Além disso, observe que, embora um construtor possa inicializar propriedades com um setter privado, essa técnica (como deve ser óbvio no exemplo fornecido) funcionará apenas se você tiver um setter público para a propriedade. Observe também que meu exemplo abreviado implicitamente chamou o construtor padrão (sem parâmetros), que, portanto, precisaria estar presente.