The GraphLayout specification can take complex forms, where we can specify separate vertex layouts, edge layout and packing layouts. Often each of these takes more sub-options.
Other frameworks in Mathematica that deal with similarly complex method specifications are user-extensible. This is documented for NDSolve, and while undocumented, also possible for NIntegrate.
Is the graph layout framework similarly extensible? Can we create our own vertex, edge or packing layout methods? Can we re-use the existing methods for other problems in isolation (e.g. pack something else than graph components)?