This instruction :
generate subroutine pool lt_source[] name l_name
message l_message line l_line word l_word.
is used by the function "ALV_TABLE_CREATE" which is called by the method cl_alv_table_create=>create_dynamic_table (or perhaps called by a function called by the method 😉 )

And in sap documentation you can read :
Up to 36 temporary subroutine pools can currently be managed for each roll area. (not 20 as i said previously)

So, this method is not usable in case of recurrent call. That's why a create data with ddic structure is betten, when possible.

Ever heard of ABAP Runtime Type Services classes that are available since 6.40? There are Object-Oriented APIs for dynamic creation and instantiation of strtuctures, internal tables and so on. For more info you can have a look at: