Technically, to interact with a deployed contract another party must know the contract's ABI which is the formal interface which declares the names, the types of return values, the types of arguments of all the functions/fields that you as contract developer decide to be visible (read public).
The ABI is a Json document, for sake of simplicity look at this example.
//This contract takes your money and store your addr
//for greetings. Nothing special. Then the deployer
//can destroy all and take money. Genius!
contract Hello{
address public greetings;
address public owner;
function Hello() public{
owner = msg.sender;
}
function () payable public{
greetings = msg.sender;
}
function takeMoneyAndDestroy() public{
require(msg.sender == owner);
selfdestruct(owner);
}
}
The corresponding ABI will be
[
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "greetings",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "takeMoneyAndDestroy",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
}
]
Once you deploy this contract on the chain, you'll get a contract address, say 0x01. You can then access this contract from a wallet like MyEtherWallet and in the section https://www.myetherwallet.com/#contracts you can easily insert the address and the ABI.
The next step is simple as MyEtherWallet will allow you to invoke functions/transactions with the contract.
About Web3. This library bridges html/js applications in the browser with a "provider" service (your ETH full node, or other API producer) which in turn will translate the calls into transactions.