The big pro for RWBuffer is the fact that it's the one that supports automatic hardware decompression and compression on reads and writes.
This feature is more often used with the normal SRV 'Buffer' type in HLSL where the vast majority of the DXGI Formats can be read and decompressed in the same way that compressed vertex attributes are decompressed on the fly. If the data you need to read needs only 8, 10, or 16 bits per channel then there's a good selection of formats that hardware can decompress and provide to the shader in the expanded 32 bit uint/float format.
The reason it's less often used with the 'RW' prefix is that this then becomes a UAV rather than an SRV. Up to D3D11.2 the only formats supported for RWBuffer were single channel R32 formats (FLOAT, UINT and SINT). All other formats would fail at runtime or shader compile time with an error about not supporting Typed UAV Loads. There was a workaround that meant it was possible to overlap an R32_UINT UAV over the top of other formats that were also 32bits in size but actually had multiple channels of varying bit depths. This meant you could do UAV loads on some extra formats that wouldn't otherwise be possible. This is explained here.
D3D11.3 however added optional support for Typed UAV Loads in the same way that D3D12 now does. There's a list of around 15 extra formats that can be used as the format for a UAV and support Loads in that format. The hardware can then optionally support a longer series of individual formats on a format by format basis. Typed UAV Loads are explained here.
In summary,
RWStructuredBuffer is a UAV around structured data. That is data made up of 32-bit uints and floats laid out into structures with a variable number of channels per member. No format decompression or compression is supported by the hardware. If you want two 16 bit uints, you'll have to pack and unpack them yourself from a single uint. The format of the UAV is DXGI_FORMAT_UNKNOWN because the format is implied by the structure layout written in HLSL.
RWBuffer is a UAV around an array of formatted (potentially compressed) data. There's no 'structure' to this data, it's just an array of one data type with the format specified by the UAV at UAV creation time. On newer hardware you can Load/Store to this buffer and the hardware will compress down to the UAV's format and decompress it again when you read it.
RWByteAddressBuffer you seem to be familiar with, but is just a "bag of bits", a bit like RWStructuredBuffer<uint> in many ways (since ByteAddressBuffers can only be loaded from at 4 byte alignment). I believe the difference between RWStructuredBuffer<uint> and RWByteAddressBuffer stems from the fact that D3D11_RESOURCE_MISC_BUFFER_STRUCTURED cannot be used with many BIND_FLAGS such as Vertex Buffer and Index Buffer. Whereas you can create a Vertex Buffer or Index Buffer that specifies the D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS flag.
As hardware matures and becomes even more general purpose there'll be less need for so many Buffer types, bind flags and misc flags. Every format will be able to be automatically decompressed and compressed and it won't matter whether it's a Constant Buffer, Vertex Buffer or Index Buffer, everything will "just work". For now though there's some not-always-obvious restrictions around how different buffers can be viewed and what operations are supported on what Buffer.