If you want to redirect /page.php?user=<username> to /<username>, where <username> is a series of a-z or A-Z chars then try something like the following at the top of your .htaccess file:
Options -MultiViews RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{QUERY_STRING} ^user=([a-zA-Z]+) RewriteRule ^page\.php$ /%1? [R=302,L]
Just to clarify, this is only to satisfy search engines that might have already indexed the old URL, or where external sites have linked to it. The URLs in your application already link directly to /<username>.
The %1 is a backreference to the captured group in the last matched CondPattern. The check against the REDIRECT_STATUS environment variable is to ensure we are only checking the initial request and not a rewritten request.
Change to a 301 only once you have tested that it's working OK.
You can then follow this with your existing rule that internally rewrites the request back to /page.php?user=<username>. Although the NC flag on your directive is unnecessary. As is the check for an existing file (and probably the directory?), unless you have files without extension? And you don't need to escape the dot in a character class. So, it can be simplified to:
RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^.]+)$ /page.php?user=$1 [L]
.htaccessfile? The order is important. If your URLs really are of the form/page/<username>/(as your updated code suggests) then you will need to make sure thatMultiViewsis also disabled.