> Почему я должен писать тут Empty, если компилируется и без этого?
Само перечисление без Elem компилируется, но вот сконструировать реальный список без завершающего пустого узла не выйдет, потому что он должен был бы быть бесконечным.
> Что такое Elem?
Это один из вариантов объявляемого перечисления List, который содержит два безымянных поля понятно каких типов.
> Я не обьявлял ее дополнительно и не нашел ее упоминания в документации, но оно работает.
Это просто простейший синтаксис перечислений (enum'ов), который в любом учебнике по расту описывается, например в растбуке:
https://doc.rust-lang.org/book/ch06-01-defining-an...