`/proc/$pid/environ` does update if the process changes its own environment. But many programs don't bother changing their own environment, because it's a bit pointless: a program's environment is not visible through normal channels, only through `/proc` and `ps`, and even not every unix variant has this kind of feature, so applications don't rely on it.
As far as the kernel is concerned, the environment only appears as the argument of the `execve` system call that starts the program. Linux exposes an area in memory through `/proc`, and some programs update this area while others don't. In particular, I don't think any shell updates this area. As the area has a fixed size, it would be impossible to add new variables or change the length of a value.