Word Poker, Who Wins?
JavaScript (224 218 213 bytes)
s=&gt;t=&gt;(v=s=&gt;(o={},l=n=0,z=3.5,[...s].sort().map(c=&gt;(n+=o[c]=-~o[c],z*=!l|l+1==(l=c.charCodeAt()))),[n+z,Object.keys(o).sort((a,b)=&gt;o[b]-o[a]||(o[b]&gt;o[a]?1:-1))]),w=v(s),x=v(t),w[0]&gt;x[0]||w[0]==x[0]&amp;&amp;w[1]&lt;x[1]?s:t)

Ungolfed:
s=&gt;t=&gt;(
  v=s=&gt;(
    o={},
    l=n=0,
    z=3.5,
    [...s].sort().map(c=&gt;(
      n+=o[c]=-~o[c],
      z*=!l|l+1==(l=c.charCodeAt())
    )),
    [n+z,Object.keys(o).sort((a,b)=&gt;o[b]-o[a]||(o[b]&gt;o[a]?1:-1))]
  ),
  w=v(s),x=v(t),
  w[0]&gt;x[0] || w[0]==x[0] &amp;&amp; w[1]&lt;x[1] ? s : t
)

After map() runs, n + z determines the ranking of a hand:

(You can understand why I initialized z to 3.5.)
In case of a tie, Object.keys(o).sort() is used to determine the higher ranking hand.
Snippet:


f=

s=&gt;t=&gt;(v=s=&gt;(o={},l=n=0,z=3.5,[...s].sort().map(c=&gt;(n+=o[c]=-~o[c],z*=!l|l+1==(l=c.charCodeAt()))),[n+z,Object.keys(o).sort((a,b)=&gt;o[b]-o[a]||(o[b]&gt;o[a]?1:-1))]),w=v(s),x=v(t),w[0]&gt;x[0]||w[0]==x[0]&amp;&amp;w[1]&lt;x[1]?s:t)

console.log(/voviu/.test(f('voviu')('kjsdf')))       //because a pair beats nothing 
console.log(/opoqo/.test(f('opoqo')('upper')))       //because 3 of a kind beats a pair
console.log(/ggegg/.test(f('woooo')('ggegg')))       //because 4 Gs beats 4 Os
console.log(/queue/.test(f('queue')('hopup')))       //because 2 pairs beats 1 pair
console.log(/ddkop/.test(f('lodpl')('ddkop')))       //because pair DD beats pair LL
console.log(/huhyg/.test(f('huhyg')('hijht')))       //both have pair HH, but G beats I
console.log(/ccyyz/.test(f('ddffh')('ccyyz')))       //both have 2 pairs, but CC(yyz) beats DD(ffh)
console.log(/nkunk/.test(f('okaok')('nkunk')))       //KK ties with KK, but NN beats OO
console.log(/bcdef/.test(f('abcdf')('bcdef')))       //because it is a straight
console.log(/qtery|retyq/.test(f('qtery')('retyq'))) //identical! so doesnt matter
console.log(/abedc/.test(f('abedc')('vyxwz')))       //because it is a "higher" straight
console.log(/hijkl/.test(f('hhhij')('hijkl')))       //because straight beats 3 of a kind
console.log(/zzzzz/.test(f('aaabb')('zzzzz')))       //because nothing beats 5 of a kind