Strategy for determining the number of homomorphisms between two Groups
In general, a group homomorphism is determined entirely by the image of a set of generators. Given this, if the codomain is finite, then this puts a relatively easy to check upper bound on the total number of possible homomorphisms. For example, in your second example question, $\mathbb{Z}_p\oplus\mathbb{Z}_p$ is generated by the elements $(0,1)$ and $(1,0)$ and so any homomorphism is entirely determined by where these elements are sent (and they must be sent to elements of order dividing $p$). I don't think you quite finished typing the entire question for question 2 because you didn't mention a codomain for the set of homomorphisms.
For your first example, note that $S_n$ can be given presentation $$\langle \sigma_i\ldots,\sigma_{n-1}|\:\:\sigma_i^2=1,$$ $$\sigma_i\sigma_j=\sigma_j\sigma_i\:\:\:\mbox{ for }j\neq i\pm 1,$$ $$\sigma_i\sigma_{i+1}\sigma_i=\sigma_{i+1}\sigma_i\sigma_{i+1}\rangle$$
Suppose $h\colon S_n\rightarrow G$ is a homomorphism. Then $h$ is determined by the image of the generators. But note, $$h(\sigma_i\sigma_{i+1}\sigma_i)=h(\sigma_i)h(\sigma_{i+1})h(\sigma_i)$$ $$=h(\sigma_i)h(\sigma_{i})h(\sigma_{i+1})=h(\sigma_i\sigma_{i})h(\sigma_{i+1})=h(1)h(\sigma_{i+1})=h(\sigma_{i+1})$$ and similarly $h(\sigma_{i+1}\sigma_{i}\sigma_{i+1})=h(\sigma_i)$. But $\sigma_i\sigma_{i+1}\sigma_i=\sigma_{i+1}\sigma_i\sigma_{i+1}$ and so we have $h(\sigma_i)=h(\sigma_{i+1})$ for all $i$. By induction the image of all generators is equal and so $h$ is determined by the image of any single generator. Given that $h(\sigma_i)$ has to be an element of order dividing 2, this significantly reduces the possible homomorphisms.