это делается с помощью ajax'a.
Сначала выводишь основной список.
Потом по "change" обращаешься к обработчику и передаешь ему выбранное значение. В зависимости от этого значения, обработчик отдаёт новый второй список. И по "change" по второму списку — добавляешь поле
в принципе, селекты и прочее я б не советовал тут использовать. В таких делах обычно требуется хорошая стилизация. Лучше просто html списки (ul>li).