When the ProjectileLaunchEvent is cancalled, the item which is being used will still be taken from the players inventory.
Simply adding a new arrow doesn't fix this because you can't tell which item was taken.
For example: I have two types of arrows, one normal arrow, one arrow named "Exploding arrow". I can't cancel the event to make sure the right arrow is taken from the inventory. Either both arrows are removed, or one I can't control.