First of all: Fl_Pack is ... let's say, somewhat tricky, i.e. it may not
exactly do what you expect or how you expect it to do it. The main
problem with Fl_Pack is that it calculates (and is able to change) its
own size (i.e. w() and h()) in its draw() method, depending on its
children's sizes. It is often easier to use one's own derived class to
do what you need so you have better control.
That said, you may be able to use Fl_Pack's y() and h() to locate the
bottom of the Fl_Pack, and then you'd only have to do some offset
calculations and use scroll_to() as you suggested (I assume: add y() +
h() - Fl_Scroll's y()). The only problem with this technique would be
(AFAICT) that you must make sure that draw() was called at least once
before you do your calculations.