Here's a little C program that decompresses a WP16-compressed file (given as the first argument) to stdout:
http://xen.firefly.nu/up/wp16.c.html. It should work fine on *NIX, don't know how useful it is on Windows though.
So as einstein95 mentioned this compression is very similar to LZSS. First there's a char[4] magic ("Wp16") and 32-bit little-endian filesize. Then there's a 32-bit "flags" field indicating whether each next 16-bit word is to be copied verbatim or to be treated as a backref. The bits in the flags field are indexed byte by byte from least to most significant bit, which is why I store it as u8[4] rather than u32 (to make it easier to index properly). Then there are 32 16-bit words corresponding to the 32 bits of the flag field. If the corresponding flag bit is 1, the word is copied verbatim. If it is 0, it's a backref (read as little-endian) that looks like "dddddddd dddccccc" where d bits form the distance and c bits the count. This indicates to copy (c + 2) words from the output history at distance d, i.e. c=3 d=5 would repeat the last 10 bytes.
That's all there is to it--hopefully someone could write a BMS script to decompress from that description.