See the spec as it were: https://eips.ethereum.org/EIPS/eip-721
> The pair (contract address, uint256 tokenId) will then be a globally unique and fully-qualified identifier for a specific asset on an Ethereum chain.
And while the code of that smart contract is immutable, it's still code and the outputs of any given function can change even when given the same inputs. The code can of course poison itself by observing other state or even delegating to other contracts, allowing forms of mutability of the contract itself.
Which, reminder, you don't own in an NFT. So hope you really really like the uint256 you bought. Also hope you have a good grasp of solidarity & really did an analysis of that smart contract first. That's a totally reasonable thing to expect people to do, right?
As you say what actually matters is proof that the signing party is the real one. And this is where the social contract matters. What gives it value is that artist X says they own wallet Y and that you can see that NFT Z was minted by wallet Y. It's just a fugazi but it can't be fixed by adding stuff to the NFT object.