My method (in super-brief):
1. Get the id the object you want to pick up, preferably using collision_line() to detect a short distance directly in front of Link.
2. Compare the x and y of Link to this object, to make sure they're close and fairly in line.
3. Create a dummy object at Link's position and pass on the sprite, important variables, time left until explosion (for bombs), and id from the liftable object.
4. Dummy object follows Link at (objLink.x,objLink.y) as long as it's being held, and draws its sprite at (x+offset,y-height).
5. Deactivate the liftable object and set Link's lifting animation. For each frame of this animation, change the dummy object's offset and height so it appears to be lifted.
6. Also, have the dummy object's height change slightly based on Link's walking frame so it appears to bounce along with him.
7. When you throw it, set the dummy object to no longer be held (so it doesn't follow Link) and set its speed and direction. Use a time line to alter its height variable so it appears to arc and bounce.
8. If the dummy object has a rock/pot/bush sprite, you can have the time line destroy it the first time its height hits 0, otherwise if it's a bomb, it can keep bouncing a few times and then stop moving at the end of the time line.
9. At the end of the time line (when the bomb has stopped moving), have it reactivate the original liftable object (that's why you recorded its id), move the original object to the dummy object's current position. In the dummy object's Destroy event (for rocks/pots/bushes that destroy without bouncing), also have these actions, and make the original object destroy itself as well.
10. Debris / explosions / random items are spawned from the original object's Destroy event.
There, I didn't say it was easy, but it totally works.
Scooternew and King Mob have also done good lift/throw features if I'm not mistaken, their methods are probably different.