Shrinkwrap subtractive deform
Shrinkwrap only calculates based on the current frame so you just need to make your collider very very tall to avoid popping out. You can always use  a custom hidden collider object that is parented to the actual object that you want to show.
In order to make the whole pins move, I would put the shrinkwrap modifier on a simple grid, and use vertex instancing to add the pins.
Basically:

Create a grid with one vertex per pin, placed in the center of where the pin should be
Create a single pin model
Instance the pin model on the grid's vertices, and make sure it aligns correctly. Don't use the align on normals option, because shrinkwrapping may change normals, causing twisting etc.
test colliding with the grid using shrinkwrap