Christian Schindelhauer describes sophisticated protocols to both perform and verify a large number of useful operations on cards and stacks of cards in his 1998 paper [SCH98].
The C++ library libtmcg [STA05] provides an implementation of the Schindelhauer toolbox.