sizeof restituisce un size_t, che è un intero senza segno, e applicandoci l'operatore di meno unario va in overflow. Per fare quello che vuoi tu devi prima convertire ad un intero con segno:
codice:
fseek(fp,-int(sizeof(libro)), SEEK_CUR);