El problema no está en Allegro. El problema de tú programa está en la gestión que haces de las listas genericas.
Haz la siguiente prueba: Abre tú programa. Y sin hacer nada más, ciérralo. Verás que no hay fugas de memoria. Tal como te comenté, el problema está en la gestión de la lista de disparos. Estas usando de una manera incorrecta la lista generica, yo no sé usar listas genericas. Pero te pasé un ejemplo usando TCollection, el cual no tiene problemas. Pero este ejemplo no es valido para ti.
Tal vez halla otra forma de hacer esto pero no la veo,este problema no lo tengo con lenguajes como python y processing.
Para encontrar la solución, te recomiendo que primero hagas pruebas creando y destruyendo la lista de genericos. Por cierto, estuve viendo algo, y ahora que lo pienso, estás usando listas genericas en modo delphi, pero tu unidad no activa el modo Delphi, échale un vistazo a esta entrada de la wiki:
https://wiki.freepascal.org/GenericsPor otra parte, tus objetos hacen uso de variables globales, algo que creo que complica el programa cuando podrían ser métodos o propiedades. Es mejor que hagas cosas sencillas y pequeñas, para ir conociendo el lenguaje.
Saludos
/Blueicaro