CSS никогда не перестанет меня удивлять. На основании ответа @magicalex я придумал следующее:
label {
display: block;
position:relative;
text-align: right;
width: 100px;
margin: 0 0 5px 0;
}
label > input,
label > select,
input {
position: absolute;
left: 120px;
}
Это позволяет сделать большую часть того, что я имел в виду, а именно горизонтальную компоновку со всеми метками, выровненными по правому краю, и со всеми полями, выровненными по левому краю, даже если они были разной ширины (что неизбежно, например, для устройства выбора даты iOS и т.п.).
Однако JSFiddle иллюстрирует оставшуюся проблему выравнивания поля, если метка разбита на несколько строк (например, из-за переводов). Но, думаю, это тоже можно решить.