One thing you can do is to create a strong type. I have described one way to do it here, and this is also described at length in the Roman Maeder's book "Programming in Mathematica" (which is the original reference).
One other thing which comes to mind is the following: you can name the pattern, and use the alias for it, for example as follows:
ptrn = {a_, b : {c_Integer, d_Integer}, e_}
f[pt : ptrn] := {a, b, c, d, e}
Then, you get
?f
Global`f
f[pt:{a_,b:{c_Integer,d_Integer},e_}]:={a,b,c,d,e}
So the function ends up being the same as if you used the full pattern directly. You can use it to check that:
f[{1,{2,3},4}]
(* {1,{2,3},2,3,4} *)
Even though this works, I would probably take the strong type route, since with the second option it is less obvious from the code which defines f what those letters stand for, and easier to make a mistake.
As for the OptionsPattern, it seems to be a rather magical construct. I gave a very schematic possible implementation here, but I am not proud of it. I think it is wired quite deeply and it is hard to implement it cleanly with the top-level code.
Optionsthen? – rm -rf♦ Nov 27 '12 at 21:51->rules for each argument will be even messier than the current definition using named patterns likevar_. I just want a way to decrease the number of times I have the whole argument list written out. – jtbandes Nov 27 '12 at 21:54