The ERC721 standard differs from fungible standards like ERC20 in a number of ways:
Each ERC-721 token is identified by a unique token ID that is linked to a single owner. This ID distinguishes each NFT from every other token within the same collection.
Unlike ERC20 tokens (and indeed other standards like ERC1155), which can be divided into smaller units (like how 1 ETH can be divided into wei), an ERC-721 token is indivisible. You cannot own or transfer a fraction of an NFT; you either own the entire token or you do not own it at all.
Additionally, ERC-721 tokens can have metadata associated with them, which can include attributes like name, description, and image URL. This metadata can represent rare attributess in the context of PFP platforms like Bored Ape Yacht Club, but can include any data. The metadata is what often gives the NFT its value, as it can signify rarity, origin, and other unique characteristics that cannot be replicated. This is not the case with fungible tokens like ERC20, where each token is considered to be identical (fungible)
In the context of your second question -
how should we design the NFT contracts for say Real Estate or Vehicles where virtually every other vehicle should have its own separate NFT contract
A solution for Real Estate would be be to implement an ERC721 compliant Real Estate contract where each each token represents ownership of a distinct House/Apartment. For cars, perhaps an ERC1155 contract may be more fitting, if you wish to have distinct categories of car make/model, and to have each model of car be grouped as a fungible asset. The design decisions are dependant on the use-case of your platform.
To be clear, if you made a RealEstate721.sol
contract to represent ownership of houses/apartments, you would not need to make a new contract every time a new Real Estate NFT was minted, you would just need to mint a new token through the contract.