I'm not sure how well this works for more complicated expressions, but my idea is as follows:
Using the option ComplexityFunction. If the domain of an intermediate expression is larger than the original expression, assign a very large penalty. Add this to Mathematica's default complexity function (Simplify`SimplifyCount).
(* define domain for readability *)
domain[e_, x_] := FunctionDomain[e, x, Complexes, Method -> {"Reduced" -> False}]
CarefulSimplify[expr_, x_, r___] := With[{dom = domain[expr, x]},
Simplify[expr, r,
ComplexityFunction -> (Simplify`SimplifyCount[#] +
10^20 Boole[!TrueQ[PossibleZeroQ[expr - #] &&
Reduce[Equivalent[dom, domain[#, x]]]]]&)
]
]
For your example this works, but again I haven't tried this for more complicated expressions.
CarefulSimplify[(1/t^2 - 1)/(t + 1/t)^2, t]
(-1 + 1/t^2)/(1/t + t)^2
Edit: I've incorporated Karsten 7.'s idea, since otherwise we're calling Reduce more than we need to.
FunctionDomainfor a potential workaround, then here and here. I would consider this a duplicate of these question (there are more on the same topic). – Szabolcs Aug 05 '15 at 20:05