On peut classer les balises html en deux familles : 'inline' et les autres ... qu'on pourrait appeller 'block' meme si toutes ne sont pas exactement des 'block'.
Parmis les balises inline il y a : <a>, <em>, <strong>, <b>, <i>, <big>, <small>, <sup>, <sub> et plein d'autres ... plus la balise inline générique <span>
Les balises inline ne peuvent pas avoir de dimension (width et height), ne provoquent pas le retour a la ligne (pas de saut de ligne apres une balise inline), la liste etant non exhaustive ...
Ce type de balise n'ayant pas de dimension, les balises inline s'adaptent a leur contenu et cela explique que tu ne puisses pas centrer le contenu d'une balise inline !!
Pour ton cas <p> est une balise block qui va donc te permettre d'utiliser un text-align pour autant ce n'est pas une utilisation correcte de <p> ! <hx> doit etre BEAUCOUP plus adapté ... je te suggere donc de revoir tes bases de xHTML