You can use setcar(nthcdr(N lst) newValue) to do this. Doesn't really need a specific function to do something so easy.
In general however, using nth-type operators on lists is a bad way to do things. Lists are sequential data structures, and are not designed for random access operators (i.e. to be treated like arrays). Each time you ask for the Nth entry in a list, it has to start at the beginning and hop along N times until it reaches the entry.
So, if you're doing a number of operations where you need access (read or write) to a numbered entry in the list, you may be better off doing:
In other words, converting the list into an array for the duration of your random access operations. For small lists, it's fine to use nth/nthcdr, but as soon as lists reach any kind of length, doing a repeated access by position can end up being very slow. The classic mistake I see people making is where they have a list and then want to (say) add up the values. They do:
for(pos 0 length(lst)-1
That's OK if the list only has 5 entries, but if it had 1 million entries (say) it would take roughly half a billion list cell traversals (N(N+1)/2) whereas the correct way of doing it would be:
That's only a million list cell traversals - so half a million times fewer!