So I've solved my own problems thanks to past posts by Robert Scheitlin, GISP and Mehretab T.Sium.
Here's the solution to the mutual exclusivity problem (input in the LayerListView.js at _onCkSelectNodeClick):
_onCkSelectNodeClick: function(layerInfo, ckSelect, evt) {
if (ckSelect.checked) {
layerInfo.setTopLayerVisible(true);
if (layerInfo.id === 'LayerID1') {
this.layerListWidget.operLayerInfos.getLayerInfoById('LayerID2').setTopLayerVisible(false);
this.layerListWidget.operLayerInfos.getLayerInfoById('LayerID3').setTopLayerVisible(false);
}
if (layerInfo.id === 'LayerID2') {
this.layerListWidget.operLayerInfos.getLayerInfoById('LayerID1').setTopLayerVisible(false);
this.layerListWidget.operLayerInfos.getLayerInfoById('LayerID3').setTopLayerVisible(false);
}
if (layerInfo.id === 'LayerID3') {
this.layerListWidget.operLayerInfos.getLayerInfoById('LayerID1').setTopLayerVisible(false);
this.layerListWidget.operLayerInfos.getLayerInfoById('LayerID2').setTopLayerVisible(false);
}}
else {
layerInfo.setTopLayerVisible(false);
}
evt.stopPropagation();
},
I repeated this code with a total 24 layers, creating a loong clunky string of combinations but it does what I want it to do, particularly between groups, so Thank You Mehretab from this post.
To remove certain checkboxes, I found the checkbox ID using Inspect Element in Chrome and inserted a bit of CSS into the style.css code. For example:
#jimu_dijit_CheckBox_1 {
display: none;
}