A couple things could cause a piston to move freely like that... none of them are really good. A broken rod, broken wrist pin (although in this case the rod would still push the piston back up), broken cap screws. And yes you can break a rod without it going through the block.
As for how rebuildable it may be, you won't know until you open up the bottom end.
Junkyard engines can cost you anything from $100 to $500. That really depends on the yard and if they know anything about engines.