Все оно правильно делает. Это делается для того чтобы, когда ты запулишь изменения в основном, то ничего не сломалось из-за изменений в модуле.
Так например, при комите в модуле был некий метод Super, но модуль получил обновление и теперь этого метода нет. Основной репозиторий был реализован с расчетом на этот метод Super, если сейчас просто запулить последнюю версию модуля, то все сломается.
Если нужно обновиль модуль, то заходим в него и делаем git pull, а потом, в основном репозитории, комитим обновление модуля.
1. Что нужно сделать, чтобы скачался текущий активный master проекта Y?
git pull в модуле
2. Как после обновления на предыдущем шаге зафиксировать Y? Т.е. даже есть master Y уедет вперед, по git clone --recursive project_X бралась строго определенная версия
Сделать комит в основном репозитории с новой версией
3. Можно ли сделать так, чтобы всегда брался master Y?
Нет. Так делать не нужно поскольку основной репозиторий может сломаться.