I'll answer my own question in case it helps anyone who comes along later.
The coroutine example code in /Mach4Hobby/LuaExamples/AdvancedExamples/CoroutineExample.mcs demonstrates the use of a coroutine from a button script. The call to the coroutine.resume(co) function is placed in the PLC Script (which is fires every ~50 ms as I understand it). This example, along with the absence of any clarification from the Mach4 Scripting Manual, gives the impression that the PLC Script is the canonical place to resume suspended coroutines. This is not the case. For modules it can and is done differently.
The "Touch Tool" module (/Mach4Hobby/Modules/mcTouchOff.lua) that comes with Mach4 calls coroutine.resume(co) by registering a callback (function) with a wxWidget event named wx.wxEVT_UPDATE_UI on the main UI frame the module creates.
UI.frameMain:Connect(
wx.wxEVT_UPDATE_UI,
function(event)
frameMainOnUpdateUI()
event:Skip()
end
)
The callback function (in this case frameMainOnUpdateUI()) is called (by the UI/wxWidgets code) whenever the main frame is "idle". The call to coroutine.resume(co) is placed within this function and is thus called often, resuming the suspended coroutine until it completes. In this case, since the PLC Script is NOT calling coroutine.resume(co) it does not need a reference to the coroutine, which I erroneously thought was required.
In short, I thought the PLC Script was the only/best place to resume suspended coroutines, this is not true for modules.