Hi,
1. You can use the Bundle option of a product to include other products in it as a "pack".
In that new product, you can set a specific price and that will be the price charged.
2. Not really. Maybe with AWOCoupon ? You would have to check with them.
Or you could do it by developping a custom plugin to do the check of the products in the cart when a coupon is (auto)loaded.
3. The related module here can allow you to display related products of the products already in the cart during the checkout:
www.hikashop.com/marketplace/product/142-checkout-related.html
Then, you can configure auto loaded coupons to apply a reduction in some cases, but as point 2, you can say that the coupon will apply only if this product and that product are in the cart.