When you say "update the PLC program remotely", do you mean reading and writing to variables in the program?
If so, then yes, you can do it easily via Modbus, both TCP and RTU. MQTT is an option, along with writing your own HTTP GET, PUT, etc, protocols is not out of the question either.