How can I get a list of the installed addons using the API?
Blender has a module it uses for addon management called addon_utils, this isn't in the API docs and is only for internal usage. But its a fairly straightforward module.

This script prints all addon versions or (-1, -1, -1) if there is no version.

import addon_utils
for mod in addon_utils.modules():
    print(mod.bl_info.get('version', (-1, -1, -1)))


Note, that the modules may be fake, that is to say, a module object that only contains bl_info, this is done to avoid importing the module just to display it in the preferences (before its enabled).

Other functions of interest are...

addon_utils.enable(module_name, default_set=True, persistent=False, handle_error=None)
addon_utils.disable(module_name, default_set=True, handle_error=None)

# (reloads from disk)
addon_utils.modules_refresh(module_cache=addons_fake_modules)
# returns all modules
addon_utils.modules(module_cache=addons_fake_modules, refresh=True)


Suggest reading addon_utils.py, if you need more info.



Note, if you just want to access enabled addons, this is a lot more simple...

what about:

import bpy
print(bpy.context.user_preferences.addons.keys())


that returns something like:

['io_scene_3ds', 'io_scene_fbx', 'io_anim_bvh', 'io_mesh_ply', 'io_scene_obj', 'io_scene_x3d',
'io_mesh_stl', 'io_mesh_uv_layout', 'io_curve_svg', 'cycles', 'sire_o', 'space_view3d_move_orig
in']


So to get the modules you can do...

import bpy
import sys

context = bpy.context

for mod_name in context.user_preferences.addons.keys():
    mod = sys.modules[mod_name]
    print(mod.bl_info.get('version', (-1, -1, -1)))


@zeffii noted this in his answer which has since been deleted so including here.