Does an Ethereum contract address hold two different kinds of file, one for the contract bytecode and another for the ABI?
The contract address only holds the contract bytecode; the ABI is not stored on the blockchain.
The ABI must be separately distributed to clients which should have it for programmatic interaction with the contract.
Clients without the ABI can still interact programmatically with the contract, basically by guessing the interface, but those guesses can be extremely good especially if informed by statements about the contract (e.g. "This is an ERC-20 token") and/or analysis (maybe even approximate decompilation) of the bytecode.