Вы все совершенно правильно описали: функция rand() является stateful функцией, т.е. она обладает состоянием (state), которое сохраняется между последовательными вызовами функции. И по понятным причинам это состояние также должно быть доступно функции srand().
Однако, во-первых, не ясно, почему вы решили, что это состояние обязательно должно храниться в локальной статической переменной, объявленной внутри функции rand(). Даже если следовать вашей логике, то намного разумнее предположить, что это - некая статическая переменная, объявленная не уровне файла (модуля), и немедленно доступная как функции rand(), так и функции srand(). Или даже глобальная переменная. (Во многих реализациях стандартной библиотеки, старающихся поддерживать работу в многопоточных приложениях, это состояние может храниться в thread-локальной переменной.)
Во-вторых, что важнее (!), реализация стандартной библиотеки в общем случае делается платформенно-зависимыми средствами, не имеющими никакого отношения к языкам С или С++. Она может быть реализована на Ассемблере, Фортране или на языке нанайских мальчиков. С языками С или С++ должен быть совместим лишь ее внешний интерфейс, но не внутренняя реализация. Поэтому рассматривать реализацию стандартной библиотеки в терминах языков С или С++ - бессмысленное и некорректное занятие. Реализация стандартной библиотеки живет по своим законам. Если ей нужно, чтобы состояние rand() было также доступно в srand() - значит так и будет. А как это сделано - волшебство конкретной реализации.