Hook for removing product from cart
If you want to remove product programatically, and still allow other modules to interact with this event, you should invoke hooks explicitly just after deletion using module_invoke_all:

module_invoke_all('commerce_cart_product_remove', $order, $product, $quantity, $line_item);


That way you have a choice - you can call it and emulate regular deletion, or you can omit it, and prevent any marketing interactions etc that your user did not trigger.

Alternatively, because line items are entities, you should be able to hook into their deletion with generic hook_entity_delete, without any modifications to the way you invoke deletion.