Haskell, 167 168168 126 bytes
f=fromEnum
r=replicate
a%b=fa?b=mod(f a-f b
a!b|a>=b=r(a%b-13)|8<9=r(26-b%a)13
c#x|elemc#x=r(c%xc?x)[0..13]||'<'++r(x%c-c?x)>14=c!x$'<'|8<9=x!c$'>''>'
s(c,s)x=(x,s++c#x++"*")
e(x:y)=x:snd(foldl s(x,[])y)
Now using xnor's arithmetic solution. Call with e str
where str :: String
is the string to be encoded.