How does it happen that you can get states like $J^\pi=3^+$ or $J^\pi=2^-$? I think this could be because $\pi=(-1)^l$ so you could have an even state in $l$ but the $J=l+s$ sum could be an odd number?
Your guess is essentially correct. If you want to think about the nucleus in a shell-model sort of way, you can say that the nuclear spin $J$ is the vector sum of the spins $S_i$ and orbital angular momenta $L_i$ of all the nucleons in the nucleus.
In the deuteron, for instance, the nucleus must be antisymmetric under exchange of the "identical" proton and neutron. In that special case we know from the non-existence of the stable diproton or dineutron that the deuteron has isospin zero, and therefore unit spin. In order to have positive parity, the deuteron wavefunction must have even $L$. (And experimentally, the deuteron is mostly $s$-wave, though there's a $d$-wave component due to the tensor part of the nuclear force.)
There are a few places in the chart of nuclides where you can look at the spin-parities of adjacent isotopes and ascribe them to the motion of the "extra" particle. For example, lithium-6 is $1^+$, and lithium-7 is $3/2^-$: you can say that the "extra" neutron has $L=1$. Or compare oxygen-16, $0^+$, to oxygen-17, $5/2^+$: that's consistent with the extra neutron having $L=2$. In large or non-magic nuclei, though, the many-body interaction is usually too complicated to make simple statements like that.
Presumably you are talking about mesons.
First of all, parity is not (-1)^L for a meson, it is (-1)^(L+1). This is because you have to take into account the fermion-antifermion relative parity for the quark-antiquark pair, which is negative.
Secondly, yes, it is L that matters and not J (which includes S). Thus, the low-lying mesons (pi, rho, D, D*, Upsilon, etc.) all have L=0 and hence negative parity. Among them, the pseudo-scalars are S=0, while the vector mesons are S=1.