Yes. Certain locations cannot be junctions or symlinks because they're accessed before the disk manager is loaded, therfore the junction targets cannot be resolved yet. Raymond Chen writes in The File System Paradox:
[...] in order to read the boot files off the disk, you need the file system driver, but the file system driver is on the disk, which you can't read until you've loaded the file system driver. Oh no, Catch-22!
The vicious cycle is broken by having a miniature file system driver built into the critical boot files. This miniature driver knows just barely enough to locate files in the root directory and load them into memory. [...]
[...] the miniature file system driver doesn't understand mount points, because mount points mean talking to the disk management service, and at the time the system is booting, the computer hasn't even loaded the operating system yet, much less some fancy advanced service that knows how to map drive letters back to ARC paths, and even if you somehow got that service running, you still have to find the device drivers for those other hard drives and load the corresponding file system drivers.
So you could probably get away with making
ProgramData a junction, since it's only needed for programs, long after the OS has booted. (That said, services like HyperV also put their data there, so be careful.)
Documents and Settings) has been moved like this several times.
However, anything that is needed to boot the OS itself, like the
\WINDOWS directory, must not be a junction or symlink.