To jak zbudowany jest plik od środka, jest zależne od pliku... Np. każdy doc, docx, pptx, xlsx itd. to zip z xml'ami. Zmień rozszerzenie pliku docx na zip i otwórz, to zobaczysz.
Nie wiem o co chodzi Ci z bajtami, jeśli chcesz czytać bajt z strumienia, to używasz ::get() (z istream).
Jeśli chodzi o ingerowanie w plik, to w przypadku małych plików po prostu wczytać zawartość do pamięci, operować na niej, a potem zapisać do pliku, jeśli chodzi o dużą... Tu się nie wypowiem, ale domyślam się, że sposób jest ten sam. Korzystanie z pamięci w tym momencie jest szybsze niż korzystanie z dysku.
//Oceniać, krytykować, minusować, uczyć jak się zmienia bity na dysku magnesem