Just write a wrapper function that toggles the data direction and CS bits, no biggie. A bit more annoying if interrupt serviced (you'll need to manage state between transactions). Discard the data received during TX, and send whatever during RX (disable output pin driver or use a resistor between MOSI/MISO).
Have seen it on a few LCDs, not that you need to read much from those, but when you can, it saves a pin I guess. Hardware support change is minimal, either tying MISO-MOSI, or bridging with the resistor (particularly if for some reason you can't deassert the pin during RX, or the device replies too soon to deassert in time, say because you can't mind it every instant because it's interrupt serviced).
A number of programmers use a similar scheme, I think. The AVR UPDI port isn't even synchronous, it's straight up async serial, with auto baud rate detect. Impressively easy to work with, you only need a generic logic-level serial adapter.
Or do you mean, one pin at all? In which case, one-wire comms aren't anything new, Dallas (now Maxim) I think was one of the first (did they patent their scheme or anything..?), even including bus-powered devices which is kinda crazy, but there you go. These don't usually have hardware support, so find a library and drop it in for bit-banging or whatever. Hm, support is probably easier with MCUs with configurable logic, might be feasible to interface it to a USART that way. But not portable enough to drop in a library for it.
Tim