In the bitcoin scripting language, how can I access other outputs of the transaction? Or how else can I limit how the coins may be spent? Is there any way to add an opcode to a UTXO that prevents how the coins are spent?

For example, in order to to spend the output, a person must send X number of bitcoin to Y address within the accompanying transaction.
There is no way to enforce a rule regarding the nature of an output when an input is spent. You will have to enforce this off chain in some manner, perhaps through multisig schemes where one key is held by a rule engine that will only sign the tx if your requirements are met.