The whole point of mktemp is, to quote its manual, to “create a temporary file or directory, safely”. Basically, in a script, you can write
file="$(mktemp)"
or
dir="$(mktemp -d)"
and use either as you wish, safe in the knowledge that the temporary file and directory are accessible only by the user running the command (and root, of course, in most setups), and that they aren’t a symlink to something else, etc. (There are still some caveats; in particular, you need to check the exit status, and the parent directory needs to be safe to use. See the documentation for details.)
mktemp -u doesn’t give these guarantees, because it separates the construction of the file name from its use; in a script, you’d have to run (don’t do this)
dir="$(mktemp -u)"
mkdir "$dir"
chmod 700 "$dir"
In between mktemp and mkdir, another process can create the directory, with different ownership; or, in the case of a file, another process can create the file or create a symlink in its place...