Почему cookie можно создавать только в начале?
для начала вам надо разобраться что такое куки. Как куки передаются на клиент. Что такое заголовки и тело HTTP запросов и ответов. И тогда все встанет на свои места. Ну а что бы небыло проблем - почитать про управление буферизацией вывода в PHP.
Чем куки отличаются от сессии в PHP?
В дополнение к ответу Сергей Протько скажу, что создавать их можно когда угодно. А вот устанавливать (отправлять) - только перед отправкой тела ответа.
Кстати, такие вещи как Symfony HTTPFoundation и PSR-7 как раз отчасти созданы для того, чтобы не простреливать себе ногу подобным образом.