Here is an in-line approach.
The CROSS APPLY will split/parse the string and then reconstruct it excluding any portion begining with a number
Edit - I should add that the subquery B1 can easily be migrated into a Table-Valued Function.
Example
Declare @YourTable table (addr varchar(250))
Insert into @YourTable values
('TUCSON AZ 85705-7598 USA'),
('TUCSON AZ 85705 USA'),
('TUCSON AZ USA')
Select A.addr
,NewAddress = B.S
From @YourTable A
Cross Apply (
Select S = Stuff((Select ' ' +RetVal
From (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(A.addr,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B1
Where RetVal Not Like '[0-9]%'
Order by RetSeq
For XML Path ('')),1,1,'')
) B
Returns
addr NewAddress
TUCSON AZ 85705-7598 USA TUCSON AZ USA
TUCSON AZ 85705 USA TUCSON AZ USA
TUCSON AZ USA TUCSON AZ USA