Добрий день
1) Спробував в себе в студії - не свариться. Можливо діло в версії (бо інакше я сам не знаю) 
2) Ну я зрозумів, що тут :
fscanf(f, "%s", &words[word]);
ви маєте тип char ** а передаєте char* чи щось в тому роді. Тому напевне Вам відповісти не можу.
3)Ну якщо ви хочете передати свій масив слів як параметр функції щоб туди записати слова, то я б так зроби би.
void read_words(FILE *f, int wordsCount, char **words)
{
for (int word = 0; word < wordsCount; word++)
{
fscanf(f, "%s", &(*words[word]));
}
//ну і нічого не треба return нити:)
}
4) Краще, мабуть, було б спочатку зчитувати к-сть слів(те число). Потім виділяти динамічно пам'ять під них (char**). Звісно, ви не будете знати довжини наперед, тому я б виділяв фіксовану кількість під слова (ваша змінна WORD_LENGTH.
Ну взагалі кажучи сам нубаська в цих ділах. Тому, можливо, Вам хтось щось краще порадить.
Ахаха:) Пан koala вже все пояснив.