I want to have two different contracts that have functions that should interact with each other. Is there a way to pass/return values through function call between contracts?
Contracts don't currently return any data. You should use callbacks for on-chain data transmission, or use an off-chain oracle.
On chain, you use the TRANSFER_TOKENS; instruction to send from contract a to contract b. Contract b would then send data back via another TRANSFER_TOKEN; call. You should update the storage of contract a to acknowledge that a call back is imminent.