There is also the potential that the rng is collapsing after the first pass. In my experience, when you use rng.Find the rng collapses to the found instances so a second pass may not include the rng you thought you were looking for.
To avoid this you could redefine the rng before each pass.
Code:
Sub nnewreplace()
Dim e(), f()
e = Array(" ", " ", Chr(160), Chr(9), "\(([a-z]{1,})\)")
f = Array("", "", "", "", "\1.")
Dim i As Integer, rng As Range
For i = LBound(e) To UBound(e)
Set rng = Selection.Range
With rng.Find
.ClearFormatting
.MatchWildcards = True
.Text = e(i)
.Replacement.Text = f(i)
.Wrap = wdFindStop
.Execute Replace:=wdReplaceAll
End With
Next
End Sub