À mon avis, on le pourrait expliquer de cette façon: Parce que, dans le premier cas, le verbe battre est transitif (battre quelqu'un/quelque chose), et les personnes se battent réciproquement l'une l'autre, de telle façon qu'elles sont le sujet et le COD en même temps. Alors, "se" représente le COD, et comme il précède le verbe, on fait l'accord. Dans le deuxième cas, par contre, le verbe sourire est intransitif (je souris À quelq'un), alors, dans ce cas, les personnes son le sujet et le COI en même temps. Et, comme tu sais, on ne fait pas d'accord avec le COI.