Do what other native-USB microcontrollers do, and implement a Class 02h (Communications and CDC), SubClass 02h (Abstract Control Model), Protocol 00h (No class specific protocol required) CDC ACM device.
There are several abstract control model requests the host computer can send to the device; among these, SetLineCoding and SetControlLineState.
Line Coding defines data terminal rate in bits per second (32-bit field), number of stop bits (0:1, 1:1.5, 2:2), parity, and data bits.
Control Line State is a 16-bit bitmap, with bit 1 corresponding to RTS, and bit 0 corresponding to DTR.
The device can send SERIAL_STATE notifications to the host. These also contain a 16-bit bitmap, with bit 0 corresponding to DCD, bit 1 DSR, bit 2 Break, bit 3 Ring, bit 4 Framing error, bit 5 parity error, bit 6 overrun, and bits 7-15 reserved.
While CTS is not available to the host, but you can use DSR instead; that one is.
If you use say a cheap Pro Micro clone (and treat it as an Arduino Leonardo) in the Arduino environment, these are exposed via baud(), stopbits(), paritytype(), numbits(), dtr(), and dtr() methods in the CDC Serial object. AFAIK it doesn't expose any functions for sending SERIAL_STATE notifications (from device to host computer), though.
I do not know if or how the Windows CDC ACM driver provides these to userspace, but in Linux, the termios interface and the TIOCMGET/TIOCMSET/TIOCMBIC/TIOCMBIS ioctl()s expose these just fine. There is even an TIOCMIWAIT and TIOCGIGOUNT ioctl()s, that efficiently wait and provide the number of changes in each field, respectively.