The biggest issue is loading cycles. Say you have scenes, A and B.
They both take a PackedScene as an exported variable. A references B, and B references A. When you load B from A, Godot will read the scene and see that there is a packed scene as a dependency. That scene is A, so it loads it. It sees B in there, and loads it. And it does so in an infinite cycle, freezing your game.
So you have to be extra careful to not cross-reference scenes.
Working on a larger game, with a team, I would rather use strings, but maybe also a custom-made addon that lets you pick and display the level your portal leads to.
Great. I thought that cycle reference was a problem even with strings.
No, cycle references only happen when Godot finds a pointer to a file, then it has to load it to get some information from it. For Godot, a string is just a string. You can also have circular references with GDScript, when two scripts reference one another as types because Godot loads and parses the other for autocompletion.