OK, maybe I will try your method since I can't figure out what is going wrong with mine. I decided to do the chain rule by hand in the differential equations. Ignore everything in comment parentheses (there are more equations that I haven't fixed yet with the new method). What I want is a way to assign Asharp=the original definition, which is a function of r[t],y[t],n[t] (as well as the other 6 dynamic variables q1r[t],q2r[t] etc) once inside the NDSolve block so it doesn't need to be computed with every reference, and also so it counts as a constant in expressions such as D[fr[r[t], y[t], n[t], Asharp], r[t]]. Same for ydsharp, Asharpdr, ydsharpdr, Asharpdn, etc, with the latter variables being computed with the implicit differentiation you suggested.
Is there a way to use Block or Module inside NDSolve to assign Asharp to have the properties I desire above?
sol2 = NDSolve[{r'[t] == fr[r[t], y[t], n[t], Asharp],
y'[t] == fy[r[t], y[t], n[t], Asharp, ydsharp],
n'[t] == fn[r[t], y[t], n[t], Asharp, ydsharp],
q1r'[t] == -q1r[t] D[fr[r[t], y[t], n[t], Asharp], r[t]] -
D[h[Asharp, r[t], y[t], n[t], ydsharp], r[t]] -
q1r[t] Asharpdr[
D[[fr[r[t], y[t], n[t], A],
A]] /. {A ->
Asharp} - (Asharpdr D[h[A, r, y, n, ydsharp],
A] /. {A -> Asharp} +
ydsharpdr D[h[Asharp, r, y, n, yd], yd] /. {yd ->
ydsharp}), q1y'[t] == ...
(*-q1y[t] D[fy[r[t],
y[t],n[t],Asharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[
t],n[t]],ydsharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[
t],n[t]]],y[t]]-D[h[Asharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[
t],r[t],y[t],n[t]],r[t],y[t],n[t],ydsharp[q1r[t],q1y[t],q1n[
t],q2y[t],q2n[t],r[t],y[t],n[t]]],y[t]],q1n'[t]==-q1n[t] D[
fn[r[t],y[t],n[t],Asharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],
r[t],y[t],n[t]],ydsharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[
t],y[t],n[t]]],n[t]]-D[h[Asharp[q1r[t],q1y[t],q1n[t],q2y[t],
q2n[t],r[t],y[t],n[t]],r[t],y[t],n[t],ydsharp[q1r[t],q1y[t],
q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]]],n[t]],q2r'[t]==-q2r[
t] D[fr[r[t],y[t],n[t],Asharp[q1r[t],q1y[t],q1n[t],q2y[t],
q2n[t],r[t],y[t],n[t]]],r[t]]+D[fy[r[t],y[t],n[t],Asharp[q1r[
t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]],ydsharp[q1r[
t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]]],r[t]],q2y'[
t]==-q2y[t] D[fy[r[t],y[t],n[t],Asharp[q1r[t],q1y[t],q1n[t],
q2y[t],q2n[t],r[t],y[t],n[t]],ydsharp[q1r[t],q1y[t],q1n[t],
q2y[t],q2n[t],r[t],y[t],n[t]]],y[t]]+D[fy[r[t],y[t],n[t],
Asharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]],
ydsharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]]],
y[t]],q2n'[t]==-q2n[t] D[fn[r[t],y[t],n[t],Asharp[q1r[t],q1y[
t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]],ydsharp[q1r[t],q1y[
t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[t]]],n[t]]+D[fy[r[t],y[
t],n[t],Asharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[t],
n[t]],ydsharp[q1r[t],q1y[t],q1n[t],q2y[t],q2n[t],r[t],y[t],n[
t]]],n[t]]*), r[0] == rinit, y[0] == yinit, n[0] == ninit,
q1r[0] == q1rinit, q1y[0] == q1yinit, q1n[0] == q1ninit,
q2r[0] == q2rinit, q2y[0] == q2yinit, q2n[0] == q2ninit}, {r,
y, n, q1r, q1y, q1n, q2r, q2y, q2n}, {t, 0,
tfinal}(*, Method->{"Shooting", \
"StartingInitialConditions"->{r[0]==rinit,y[0]==yinit,n[0]==ninit,q1r[\
0]==q1rinit,q1y[0]==q1yinit,q1n[0]==q1ninit,q2r[0]==q2rinit,q2y[0]==\
q2yinit,q2n[0]==q2ninit}}*)]
$Aborted