Actually, if you are willing to deal with an unconventional driver approach, the USB interface circuitry could be very simple - just a pullup resistor.
A USB host identifies the presence of connected devices by a the use of a pullup resistor on the D+ or D- line, depending on device speed. This is detected by the core USB driver, which attempts to query the device and load (or install) an appropriate device-specific driver. However, if there is in fact no device connected, the operating system will log this as an error, in ways that can be seen by software making the right operating-system-specific inquiries (for example, the linux command dmesg will show the kernel log of this failed connection, in other systems a notification may pop up).
Interfacing to the telephone line is a subject in itself, and deserves it's own research. Essentially though, you would construct a suitable and isolated off-hook detection circuit, and have this drive some sort of switch to place the pullup resistor between one of the USB data lines and USB VBUS.
That said, the cost of a true USB interface is relatively low (in any reasonable analysis, lower than the time you'd spend encapsulating detection of phony resistor-only devices), and would enable a more traditional driver interface.