We can do that in vanilla, is there no script function or something that can be used for that?
At any rate, while the rename function is there, how do you invoke a window for users to type in?
(1) Make an array of strings, each containining the character for the keycode that is the same as the character's position in the array.
(2) Make a function with http://www.creationkit.com/RegisterForKey_-_Form to register for every possible character you want. You can do that easily with a loop since it just takes an integer argument.
(3) Call the function and immediately open a messagebox, with something like "Type the name you want to assign, then press OK."
(4) In the http://www.creationkit.com/OnKeyUp_-_Form block you get the string at the position in the array corresponding to the keycode passed and add it to the end of a "new name" string. Or delete the last character if they pressed delete, you can do that with SKSE's substring function.
(5) In the line after the messagebox code, use http://www.creationkit.com/UnregisterForAllKeys_-_Form
(6) Send the new name string to a new messagebox and ask them to confirm it, if they say no then restart the process. If they say yes, change the name.
Also:
and while we're on the matter, can someone explain to me how the game can rename an object and not affect any other object like it?
Either every reference has its own name that doesn't -need- to be inherited from its base object but is by default, and the game has access to that but papyrus doesn't... or the game creates a new base object for it and keeps it in the saved game, which papyrus also can't do I think. I guess you'd have to go check if a game with enchanted weapons has weapon base objects stored in it for those weapons. If it does, I guess it's the second idea. If not, probably the first.
Edit: You might also be able to determine this by trying to use "GetBaseObject" on a player-enchanted weapon. Seems like a waste of time though since you can't do much with it either way.