Anzitutto il "difficile" e` un giudizio che puoi lasciare alla fine; probabilmente ti accorgerai che in informatica non ci sono cose "difficili": ci sono cose che si sanno fare ed altre che non si sanno fare.
In qualche caso ci sono cose complesse, ma questo e` un discorso diverso.


Ed arrivo con alcune domande (e forse qualche risposta):
ci sono una testata e un piede con dentro una bottoniera che sono fissi (position: fixed
perche` sono fixed? Non sarebbe meglio due blocchi con posizionamento assoluto? (cosi` la barra di scorrimento non li comprende, e non hai problemi di sovrapposizioni.
Piuttosto devi vedere cosa succede se la finestra del browser e` piu` bassa della somma di header e footer (o comunque lascia poco posto in mezzo)

Tra questi contenuti ce ne è uno che è un iframe,
Perche` usi iframe, che sono strutture obsolete e deprecate (non valide in alcune DTD); potrebbero esserci browser che non li supportano.
Piuttosto vedi se ti conviene usare tecnologia di tipo AJAX (info nel forum JS)

esiste uno stile CSS che mi permetta di dire che l'iframe dev'essere di una altezza tale da essere tutto visibile quando scrollato al punto giusto?
Non capisco bene la domanda.
Cosa deve essere tutto visibile: il blocco che tu chiami iframe dentro la finestra, oppure il contenuto che ci scrolla all'interno?
Vorresti spostare la pagina in modo da posizionare il top di tale blocco in cima alla parte visibile? Si fa in modo semplilce con una semplice ancora (<a name="..." />) ed un link che punta a tale ancora.

esiste un modo per dirgli che dev'essere alto come la parte di viewport che i due elementi fixed sopra e sotto lasciano libera?
Con i posizionamenti assoluti e` possibile definire top e bottom contemporaneamente (chiaramente in tal caso non si puo` definire height).