Let $N$ be the number of rolls it takes to reach a total of $T=24$ or greater using a die $X$ with non-negative integral values. Suppose $n \ge 0$ rolls have occurred and the value of $T$ has not yet been reached. Let $p_n$ be the probabilities of the totals, which therefore range from $0$ to $T-1,$ and set $p_n(T)$ to be the chance $T$ has already been reached. Because this is an exhaustive description of the possibilities, $p_n$ is a probability distribution. (This describes a stopped process.)
The next roll updates $p_n$ to $p_{n+1}$ by adding the random variable $X$ and capping its results at $T.$ This addition is performed by means of a convolution of the distribution of $X$ and $p,$ thereby requiring $O(T\log(T))$ effort, because all probabilities associated with totals of $T$ or greater may be ignored.
The expected number of rolls to attain $T$ will be somewhere around $T/E[X],$ as suggested in the question. Thus, this calculation will need to be repeated around that many times, resulting in $O(T^2\log(T)/E[X])$ effort, which is practicable for $T/E[x]$ up to many thousands.
The sum $p_n(0)+p_n(1) + \cdots + p_n(T-1)$ is the chance that the total has not reached $T$ or greater after $n$ rolls. In other words, it is the survival function,
$$S(n) = \Pr(N\gt n) = \sum_{k=0}^{T-1} p_n(k).$$
This gives us full information about the distribution of $N.$ In particular, its expectation is
$$E[N] = \sum_{n=0}^\infty S(n).$$
Here, for instance, is the survival function for the example in the question:
As proof of concept, here is R
code to carry out the calculation for the example in the question. Its arguments are a representation of the die (a vector of its possible values) and the target value. Its output gives values of the survival function at $n=0, 1, 2, \ldots$ up to a point where cutting off its infinite tail likely makes an error less than a specified small threshold
value.
die <- c(0,0,0,1,2,6)
target <- 24
f <- function(die, target, n.max, threshold=1e-12) {
X <- c(1, rep(0, target-1))
d <- rev(tabulate(die+1) / length(die))
P <- list(1)
repeat {
X <- convolve(X, d, type="open")[1:length(X)]
P <- c(P, p <- sum(X))
if (p < threshold / target) break
}
unlist(P)
}
p <- f(die, target)
The expected number of rolls is the sum:
sum(p)
17.18552
Incidentally, for an ordinary die, the expected number of rolls to reach $24$ is a little greater than $7:$
sum(f(1:6, target))
7.333484