We can perform a brute-force search on all such polynomials with roots up to a certain magnitude. First note that if $p(x)$ is a "nice" polynomial with roots $x_1 < x_2 < x_3$, then so is $q(x)$, the polynomial with roots $0$, $x_2 - x_1$, and $x_3-x_1$. This means that we only need to look for polynomials with one root at 0 and the other two roots positive integers. Moreover, we can restrict our case-checking to cases with $x_3 \geq 2 x_2$, since if we have a "nice" polynomial with roots $0, x_2, x_3$, then the polynomial with roots $0, x_3-x_2, x_3$ is also "nice". (Make the substitution $x \to x_3 - x$ to see this.) Finally, we can multiply any "nice" polynomial by an overall factor to get another "nice" polynomial; so we only need to check monic polynomials.
Define a monic polynomial with roots $0, x_2, x_3$, and a function to find the roots of its derivative:
p[x_, x2_, x3_] = x (x - x2) (x - x3)
derroots[x2_, x3_] = x /. Solve[D[p[x, x2, x3], x] == 0, x]
Generate all polynomials with $x_3 \leq x_\text{max}$, and select all of them for which their derivative vanishes at integer points:
xmax = 100;
results = Select[Flatten[
Table[{{x2, x3}, derroots[x2, x3]},
{x2, 1, xmax}, {x3, 2 x2, xmax}], 1],
And @@ Map[IntegerQ, Last[#], {1}] &]
(* {{{9, 24}, {4, 18}}, {{15, 63}, {7, 45}}, {{18, 48}, {8, 36}}, {{21, 45}, {9, 35}},
{{27, 72}, {12, 54}}, {{36, 96}, {16, 72}}, {{42, 90}, {18, 70}}} *)
Interpreting this output, here are all the "nice" cubic polynomials with a root diameter less than or equal to 100, up to translations and inversions:
\begin{align*}
p(x) &= x(x-9)(x-24) & p'(x) &= 3 (x-4)(x-18) \\
p(x) &= x(x-21)(x-45) & p'(x) &= 3 (x-9)(x-35) \\
p(x) &= x(x-18)(x-48) & p'(x) &= 3 (x-8)(x-36)\\
p(x) &= x(x-15)(x-63) & p'(x) &= 3 (x-7)(x-45) \\
p(x) &= x(x-27)(x-72) & p'(x) &= 3 (x-12)(x-54) \\
p(x) &= x(x-42)(x-90) & p'(x) &= 3 (x-18)(x-70) \\
p(x) &= x(x-36)(x-96) & p'(x) &= 3 (x-16)(x-72) \\
\end{align*}
The case found by the OP is indeed the one with the smallest root diameter.
We can also define "quasi-nice" polynomials as those whose roots are integers and whose extrema are rational numbers. To find these, we replace IntegerQ in the above code by Element[#, Rationals] &; this yields four "quasi-nice" cubic polynomials with a root diameter smaller than 24:
\begin{align*}
p(x) &= x(x-3)(x-8) & p'(x) &= (3x-4)(x-6) \\
p(x) &= x(x-7)(x-15) & p'(x) &= (x-3)(3x-35) \\
p(x) &= x(x-6)(x-16) & p'(x) &= (3x-8)(x-12) \\
p(x) &= x(x-5)(x-21) & p'(x) &= (3x-7)(x-15)
\end{align*}
The code also returns an addition 24 "quasi-nice" polynomials with root diameter between 24 and 100.
(x + 1) (x - 8) (x - 23)that is smaller than 216. – Carl Woll Sep 03 '21 at 19:29