The issue is likely that eigs doesn't use the residual as you describe it: The iterative algorithm used inside of eigs when computing the eigenvalues of smallest absolute value is transforming the generalized eigenvalue problem into a simple eigenvalue problem, of which it computes a few eigenvalues of largest absolute value.
So issues with the residual are likely due to the transformations applied to matrices A and B to achieve this. You can find out which simple eigenvalue problem is being solved underneath for your case by using the Display option:
eigs(sprandn(1e3, 1e3, 1e3), sprandn(1e3, 1e3, 1e3), 5, "smallestabs", Display=true)
The display in this case shows the problem being solved underneath as
Find eigenvalues of A\(B*x) = mu*x.
So in this case, the residual being used internally will be norm(A\(B*x) - mu*x) / mu, where mu is the inverse of the eigenvalues being returned.
By the way, eigs doesn't use the ARPACK library anymore, although we still reference it in our documentation since many of the treatments of the various cases are still strongly based on the original implementation of eigs that used ARPACK, and on the recommendations of the ARPACK user's guide.