Oil-based polyurethane is a very durable and hard-curing finish. It bonds well to itself, especially if each coat is sanded a little after it has dried well enough so it powders. This creates fine scratches, which improve the bonding of the next coat.
It’s a good idea to do this fine sanding between coats anyway to remove dust nibs.
But polyurethane doesn’t bond so well over finishes marketed as sealers, especially over sanding sealer. This sealer is good for use under non-polyurethane varnishes because regular alkyd varnishes gum up sandpaper. So to speed production, a sanding sealer can be used for the first coat. Sanding the first coat not only removes dust nibs. It also removes the roughness caused by the swelling of the wood fibers.
Shellac can also be used to seal wood under polyurethane. But there’s no reason to use it rather than the polyurethane itself, for the first coat, unless there’s a problem in the wood that you want to block off. Problems include pine knots, silicone from furniture polishes (which causes “fish eye” or “cratering,” especially on old wood that is being refinished), and odors from smoke damage or animal urine. For these cases, applying a first coat of shellac usually blocks off the problem.
If you do use shellac, you should use the dewaxed variety. The commercial product, available in home centers and paint stores, is SealCoat. Or you can buy dewaxed shellac flakes and dissolve your own in denatured alcohol.