One function, four checks. I'm not sure how you're getting sixteen.
Code:
for each element in the array, with optional pruning for current XY
coordinates to EOL subtraction for length of the word to find
if this letter is the first letter in the word
function( x, y, north )
function( x, y, east )
function( x, y, south )
function( x, y, west )
Optionally you can add a few more parameters, such as what word you're looking for, and what letter you're on, etc etc. You don't ever need to check more than the direction you're heading, once you've started on a word, because you don't have words that zig-zag all over, so just keep heading in the same direction until you run out of word, have a full word found, or run out of maze...er...word-search.
Quzah.