From Critique to Clarity: A Pathway to Faithful and Personalized Code Explanations with Large Language Models