Why are reactions of acids with metals exothermic?
Yes there is a rigorous way of calculating the enthalpy change.  

First write down an example reaction.  It might not be as easy as you think.  What species are really formed when zinc chloride (for example) dissolves in water?

The simple version below...

$$\ce{Zn(s) + 2 H+(aq) -&gt; Zn^2+(aq) + H2(g)}$$

...won't do, solvated zinc ions in hydrochloric acid are present in a variety of tetrahedral chloro-aqua complexes.

So maybe something like

$$\ce{Zn(s) + 2 H+(aq) + 2 Cl-(aq) + 2H2O(aq) -&gt; ZnCl2(H2O)2(aq) + H2(g)}$$

This at least shows which bonds are being broken and which are being formed:


Zn-Zn bonds (metallic) are broken
H-H bonds are being formed
Zn-Cl and Zn-aqua (actually zinc-oxygen) bonds are being formed


To figure out the enthalpy change, you can figure out the approximate enthalpy of formation of each bond type.  H-H bonds are pretty "strong", i.e. the bond enthalpy is relatively high at 436 kJ/mol.  So when those bonds are formed, that enthalpy is released.  Zinc-water (i.e. zinc-oxygen) and zinc-chlorine bonds are also pretty strong at about 284 and 229 kJ/mol, respectively.  Zinc-zinc bonds enthalpies are only ~29 kJ/mol.

Add it all up, and you get a lot of enthalpy being released!