For instance, make a call (set-random-seed n), but be able to change n, to be (set-random-seed 1) to get one pattern of "random" numbers, then call (set-random-seed 2) to get another different pattern of random numbers, etc.

src/sysdep.c, line_2427, long get_random ... - the C-function computing the random number

The main problem here is that the C-variable holding the "seed" is managed by the standard library of the underlying C-compiler, so there is no built-in uniform way to set or read the "seed" variable across multiple platforms and multiple C-compilers from the Emacs Lisp level.

In other words: there is no accessible internal Emacs variable which could be set to a new seed. "seed_random" and "get_random" both call functions from the standard C-library, depending on the platform where the C-code of Emacs was compiled, but both functions have no direct access to the "seed" variable of the C-library.

I assume that one of the reasons for the somewhat strange (random t) solution to compute a new seed was that "t" is independent from any hardware limitations or number formats, so it is guaranteed to work with even the oldest C-compilers.

PRNGs typically use some sort of internal state to generate a sequence of "random" numbers. The seed is merely used to set that state. The question then turns to how you set the seed. If you need highly random numbers (like you're working on crypto algorithms), you're better of not using the PRNG in Emacs at all. At that point, if you're on Linux/FreeBSD, you can use /dev/random or /dev/urandom, depending on how paranoid you are.

If your needs are more pedestrian (a card game or something), you can simply read the current time with CURRENT-TIME and use the numbers returned to seed the RNG. If you want to do this somewhat portably, use both the seconds and microseconds values as part of the seed. Microseconds will be less predictable, but some systems don't use it and it will be zero everywhere, leaving you with just seconds.