I would think that you could use Portal content, but not distribute the content. So anybody who plays your map but doesn't have Portal installed would see errors instead of the models. This wouldn't be ideal but is as far as I know legal.
As for making a button, you could make a 3D model as Youme said but I think it would be much simpler to make a brush-based button. Make a shape, most likely a cylinder, with the block tool. Tie it to entity
func_button. You can set the movement angle, reset time, speed, and distance of the button. In the button's flags, check the "Touch Activates" option. Your door will either be a
func_door or a
prop_dynamic. Give names to both the door and the button. In the Outputs for the button, have
OnPressed door Open. If the door is a model instead of func_door, use
OnPressed door SetAnimation Open instead. If you want the door to close when the button resets itself add
OnOut door Close.