Até onde sei, a principal diferença é que unsigned char aceita caracteres de valor ASCII acima de 127, o que inclui os acentuados. Talvez isso seja útil, considerando que os nomes de filmes podem ocorrer em vários idiomas.
Você já tentou fazer um casting com (unsigned char *) junto aos campos que aceitam esse tipo como argumento, na hora de chamar achePalavra()?