BLPs are image containers if I recall. They support a vast variety of different image formats. For example they support up to 256 colour palleted images, reduced colour depth bitmaps, full colour depth bitmaps, JPEG standard DCT compression as well as realtime orientated texture compression like DXT.
As such manipulating them is not easy and requires quite a large library to support most of the above.