After some digging around, It turns out that at the top of the roblox “ChatScript”, there is a DoEverything() function that sets up all of the events and functions for the client side of the chat system.
Inside this function, there is another function called ConnectEvent that is fired in multiple places. One time this is called is when the ChatScript does ConnectEvent("ToggleVisibility") inside the DoEverything() function. If you parent the BindableEvents created by the ConnectEvent function to ReplicatedStorage, they remain functional and you are able to hook your own events to them.
The event called ToggleVisibility is the one that is fired by CoreGui when the player decides to toggle chat using Roblox’s button, so you can simply parent this to ReplicatedStorage and hook your own events to react accordingly.