Hello,
Adding to these comments, this also illustrates those cases where NIntegrate needs to have a function with numeric argument:
expr[z_?NumericQ] := Integrate[f[x], {x, z, \[Infinity]}]
FindRoot[expr[z] == 0.5, {z, 1}]
However, if this was the problem that the original poster had in mind, then why not?
g = Integrate[DiracDelta[x] + Exp[-x], {x, z, \[Infinity]}, Assumptions -> Element[z, Reals]]
FindRoot[g == 0.5, {z, 1}
This avoids repeated calls to Integrate.