It's not an easy calculation (like anything nonperturbative and interesting). Witten evaluates it using cut-and-paste techniques which first he has to devise a generally covariant regularization scheme to use.
The first step is to quantize the theory on an arbitrary closed oriented surface. The Hilbert space can be identified with the space of conformal blocks in an associated WZW CFT. Then to a filling of this surface one needs to associate a state in this Hilbert space. Finally, to compute the partition function on a 3-manifold, one decomposes it into two such filled surfaces (a "Heegaard splitting") and computes the inner product between the associated states.
One nice thing about all this is that every one of these partition functions are full of deep meaning! For example, the partition function on a sphere is the exponentiated entanglement entropy across a disk, and encodes the quasiparticle content in a nontrivial way.
Wilson loops can be evaluated similarly by studying surfaces with punctures.
I return to that paper at least every few months and always find new interesting things in it I didn't see before. :)
In other news, there is some perturbative->nonperturbative progress recently by Gukov, Marino, Putrov, and others which use this Lefschetz thimble technique to better control the expansion around saddle points $dA = 0$. This approach is more direct in some ways from the path integral. Of course, you should expect significant reorganization of degrees of freedom to occur for us to go from a propagating gauge field to a nontrivial TQFT!