How do I add a list of paths in the Blender preferences manually?
You would have to declare a CollectionProperty and assign its type to a previously declared PropertyGroup to hold multiple generic entries. Demo based on the code provided in the docs:

bl_info = {
    &quot;name&quot;: &quot;Example Add-on Preferences&quot;,
    &quot;author&quot;: &quot;Your Name Here&quot;,
    &quot;version&quot;: (1, 0),
    &quot;blender&quot;: (2, 80, 0),
    &quot;location&quot;: &quot;&quot;,
    &quot;description&quot;: &quot;Example Add-on&quot;,
    &quot;warning&quot;: &quot;&quot;,
    &quot;doc_url&quot;: &quot;&quot;,
    &quot;tracker_url&quot;: &quot;&quot;,
    &quot;category&quot;: &quot;Development&quot;,
}


import bpy
from bpy.types import Operator, AddonPreferences, PropertyGroup
from bpy.props import StringProperty, CollectionProperty


class CUSTOM_PG_filepaths(PropertyGroup):
    # name: bpy.props.StringProperty()
    path: bpy.props.StringProperty(subtype='FILE_PATH')
    display: bpy.props.BoolProperty()

class ExampleAddonPreferences(AddonPreferences):
    # this must match the add-on name, use '__package__'
    # when defining this in a submodule of a python package.
    bl_idname = __name__

    filepaths: CollectionProperty(
        name=&quot;File paths&quot;,
        type=CUSTOM_PG_filepaths)

    def draw(self, context):
        layout = self.layout
        layout.label(text=&quot;This is a preferences view for our add-on&quot;)
        for i in self.filepaths:
            if i.display == True:
                layout.prop(i, &quot;path&quot;)

filepath_list = {
    &quot;geo&quot;: &quot;//asset.obj&quot;,
    &quot;anim&quot;: &quot;//asset.fbx&quot;,
    &quot;render&quot;: &quot;//asset.exr&quot;
}

def register():
    bpy.utils.register_class(CUSTOM_PG_filepaths)
    bpy.utils.register_class(ExampleAddonPreferences)
    
    paths = bpy.context.preferences.addons[__name__].preferences.filepaths
    if not paths:
        for key, value in filepath_list.items():
            item = paths.add()
            item.name = key
            item.path = value
            item.display = True


def unregister():
    bpy.utils.unregister_class(ExampleAddonPreferences)
    bpy.utils.unregister_class(CUSTOM_PG_filepaths)

If you'd like to allow the user adding an arbitrary amount of filepaths, you can display the contents of the PropertyGroup in a custom UIList which will look like the material list, see:
Create an interface which is similar to the material list box

Alternatively you can just add a simple operator to add a new item:

class OBJECT_OT_addon_prefs_example(Operator):
    &quot;&quot;&quot;Display example preferences&quot;&quot;&quot;
    bl_idname = &quot;object.addon_prefs_example&quot;
    bl_label = &quot;Add-on Preferences Example&quot;
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        preferences = context.preferences
        addon_prefs = preferences.addons[__name__].preferences
        item = addon_prefs.filepaths.add()
        item.display = True
            
        self.report({'INFO'}, &quot;New Filepath added&quot;)
        return {'FINISHED'}