C'est en fait un peu compliqué. Il faut d'abord savoir que "offert" est un participe passé. Ensuite, on doit trouver le verbe de la phrase. Ici c'est "a", du verbe "avoir". Avec avoir, on accorde le mot avec le complément d'objet indirect de la phrase, si celui-ci est placé avant, sinon on laisse le participe passé au masculin et au singulier ("offert"). Le complément d'objet indirect est la partie de la phrase qui répond à la question "à qui" ou "à quoi".
Elle a offert une boite de chocolats à qui?. À "lui". On veut donc accorder avec le mot "lui". C'est un mot masculin et singulier, alors on écrit "offert".
C'est un des cas les plus compliqués de la grammaire française. À l'oral, la différence s'entend peu et, à l'écrit, bien des gens se trompent même si le français est leur langue première.