Instead of trying to make the smart object to work for you, a far simpler approach is to place the icon sprite in the file, then select one, and create a layer mask.
To switch out icons, unlock the layer mask from the icon content, and select the icons thumbnail to move the content.
The answer is exactly what you'd expect it to be. Leave the reference handle in the middle, and add the canvas equally all round. Now place your additional sprites at the bottom of the SO, and save it. It will be in the same place, and because the additional canvas at the top of the SO is transparent, it will not affect the main image.
Isn't adding a layer mask to said smart object a much simpler solution in this case?
Otherwise you have to open the smart object each and every time you want to switch icons. With a layer mask you can change the icon and visible canvas in the main layer stack, and it also updates in realtime, while the smart object forces you to switch back and forth, and will not update in realtime.
And if you need multiple copies of the same smart object, you can still reference the same object's contents, and still make changes to the "canvas" shown by applying a different layer mask. With a smart object's canvas all the referenced instances will change - not just the one you happen to want to affect.
That isn't what the OP was asking. He wants to add to the SO without having its position alter in the original document.
He doesn't want to 'switch icons'. He wants to add more icons to the SO.