Our online order system used to tack $5 on every order automatically; when people complained we'd just add free 'stuff' to their orders. I recently upgraded us to a new online shopping cart that can calculate the actual rate live from USPS and UPS; now it tacks on 50 cents to $2.50 and customers are much happier.
We also charge an extra 50 cents for ANY US Mail order! Just because they are such a PITA to deal with.
As for returns -- we deal with them on a case-by-case basis. If it was our mistake, we always pay shipping. If it's a small item with small shipping cost, we pay it even if it's the customer's fault. Big items we often offer to split new shipping 50-50.
As for complaints-- go ahead and complain! With a small company like ours, it makes a big impression, fast...hence our new ordering system. I used to work for a big mail order company, too -- and you may not get results right away, but rest assured those complaints get tallied up and onto a manager's desk. When there are enough complaints, changes can happen.
DANBOB