I think a naïve, manual approach would be to infer the implementation from the gossip information, as you suggested. In particular, there are various feature flags that are advertised in the node_announcement
gossip message, marked with an N
in the context
column of the table in BOLT 9.
Given a sufficiently recent understanding of which implementation supports which feature, and more importantly, where the implementations diverge in their support, and also assuming that most of the gossiping nodes run reasonably recent versions of their respective software, this might allow you to make an educated guess.
The obvious caveat of this approach is, of course, that once Lightning is done™ and we finally reach feature parity between all implementations (soon!), such distinctions will no longer be possible to be gleamed from gossip data.