Olá. Muitas dúvidas :-)
Tentarei responder uma por vez.
Os cabeçalhos Accept/Conten-Type não ficaram muito claros para mim,eles são os MIME_Types?
Na verdade o que o Accept e o Content-type recebe como valor é um MIME Type. Você consegue ver quais são os MIME Types disponíveis em uma requisição HTTP no link da MDN: https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Basico_sobre_HTTP/MIME_types
Se eu pego uma pagina HTML simples, e altero o cabeçalho para JSON ( por exemplo) isso ira dar um erro de parse, por o html esta em um formato diferente do especificado?
Pra responder essa, precisamos saber a diferença entre o Aceept e o Content-type.
Se enviarmos um Accept com o valor de application/json estamos falando para o servidor que queremos uma resposta que seja JSON, sendo asssim o nosso servidor nos enviará um Content-type com o valor de application/json e seu corpo da resposta teremos um JSON. Então, utilizamos o Accept para solicitar um tipo de arquivo para o servidor web, e o servidor web informa pra gente qual é o tipo de arquivo que ele respondeu pelo Content-type.
Show! Agora respondendo sua pergunta. Se você alterar o Content-type para application/json mas a resposta que você está enviando é um HTML, isso não dará erro nos navegadores modernos mas ele tentará interpretar o HTML como JSON. Faz sentido?
Se eu monto uma pagina em PHP na formatação JSON (por exemplo) é necessário especificar esse content type no header da pagina?
Sim. Isso é bem importante se você estiver implementando uma API RESTful.
Se ficar qualquer dúvida é só falar :-)