это ключевое слово или специальный тип данных для C для обработки файлов?
То, к чему вы обращаетесь, это структура typedef, используемая стандартной библиотекой io для хранения соответствующих данных для использования fopen и ее семейства функций.
Почему он определен как указатель?
Используя указатель на структуру, вы можете передать ее в качестве параметра функции. Это, например, то, что примет fgets или fgetc, в виде function(FILE* fp)
Функция fopen будет возвращать указатель на вновь созданную структуру FILE, назначение этого нового указателя неиспользуемой заставит их указывать на одну и ту же вещь.
Содержит ли он поток внутри файла и другие данные?
Определение структуры кажется немного более призрачным, чем ее описание. Это прямо взято из моего stdio.h, из MinGW32 5.1.4
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
Что включает в себя прекрасный комментарий перед ним:
Некоторые считают, что никто в здравом уме не должен использовать
внутренности этой структуры.
Содержимое этой структуры, по-видимому, сильно меняется в других реализациях, источники glibc обычно имеют некоторую форму комментариев, но их структура для этого скрыта под большим количеством кода.
Имеет смысл прислушаться к вышеупомянутому предупреждению и просто не беспокоиться о том, что оно делает. :)