Hi Colton,
For quick answers:
1. Look at nimbleExternalCall. It is somewhat rudimentary but is designed to let you call C/C++ code directly (from compiled nimble code), without going through the R interpreter. But to use Rcpp, you may have to code the C++ and create the #includes etc yourself and rely less on Rcpp's slickness (e.g. sourceCpp) directly from R. You need to have access to both the .o and .h files.
2. I am not a deSolve expert but I think it wraps layers of R processing around a call to a C++ internal that does the actual integration. It may be the case that all the time in the R interpreter is what is so costly. If nimbleExternalCall is too clunky, you could do the following: Use Rcpp completely independently of nimble, so that you have an R function (created by Rcpp) that calls directly to compiled code to compute what you want. Then call that function via a nimbleRcall. The overhead for the nimbleRcall should be much less (but not nothing) if you're not spending time executing R other than calling back into compiled code.
I'm happy to help look at details or sketch ideas if you start exploring one of these.
HTH
Perry