Co do drugiego, to ogólnie atrybut [value] pól formularza nie ma nic wspólnego z własnością value tych pól w DOM. [value] to tak naprawdę domyślna wartość tego pola (czemu odpowiada defaultValue w DOM) i w czasie aktualizacji wartości pola się nie zmienia. Niemniej dla kilku pól, w tym [type=hidden], zmiana jednego, pociąga za sobą zmianę drugiego, zgodnie ze szczegółami w specyfikacji HTML.
Co do pierwszego: ukryte pola nie są interaktywne i użytkownik nie może w nie nic wpisać, zatem ich wartość zawsze musi zostać ustawiona przez skrypt. Dlatego też nie ma sensu zapisywać zawartości tych pól. Jeśli strona zostanie wczytana na nowo, po prostu trzeba na nowo ustawić wartości takich pól.
Inna rzecz, że mam wrażenie, że mocno przekombinowałeś. Czemu nie zrobiłeś jednego, dużego formularza na całą stronę? Można też zastosować atrybut [form].