You definitely have to get creative to make this work.
You can do a lot of custom stuff with HTML, Javascript, and CSS - but in order to get Forms to retain what you've done, it needs to end up in form fields somehow.
Here's one way to do it, trying to mimic the graphic you posted.
1. Add a table to your form. Give it a CSS Class name of: sectionsTable. Set it to a fixed amount of 36 rows. Add 4 fields (number fields) named NW, NE, SW, and SE. Set the default value of all of those fields to zero. This table will actually be hidden, but this is where the actual values will be stored (stored as numbers 0, 1, 2, or 3).
2. Add a custom HTML element to your form, with text (centered) that says "North". Give it CSS Class name of: northLabel.
3. Add a custom HTML element to your form, with text (centered) that says "South". Give it CSS Class name of: southLabel.
4. Add this CSS to your form:
.nw {width: 40px; height: 40px; margin-top: 0px; margin-left: 5px; margin-right: 0px; margin-bottom: 0px; display : inline-block; border: 1px solid black; background: none; -webkit-appearance: none;}
.ne {width: 40px; height: 40px; margin-top: 0px; margin-left: 0px; margin-right: 0px; margin-bottom: 0px; display : inline-block; border: 1px solid black; background: none; -webkit-appearance: none;}
.sw {width: 40px; height: 40px; margin-top: 0px; margin-left: 5px; margin-right: 0px; margin-bottom: 0px; display : inline-block; border: 1px solid black; background: none; -webkit-appearance: none;}
.se {width: 40px; height: 40px; margin-top: 0px; margin-left: 0px; margin-right: 0px; margin-bottom: 0px; display : inline-block; border: 1px solid black; background: none; -webkit-appearance: none;}
.spacing {width: 30px; text-align: right; display : inline-block;}
.holder {width: 100%; text-align: center;}
.north {border-top: 5px solid yellow!important;}
.east {border-right: 5px solid yellow!important;}
.south {border-bottom: 5px solid yellow!important;}
.west {border-left: 5px solid yellow!important;}
.sectionsTable {display : none;}
5. Add this Javascript to your form:
$(document).ready(function () {
var newHTML = '';
//Create all the buttons
for (i2 = 3; i2 >= 1; i2--) {
newHTML = '<div class="holder">';
for (i = i2*12-5; i <= i2*12; i++) {
newHTML = newHTML + '<div class="placeholder spacing">' + i + ':</div>'
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder nw" value="NW"></input>';
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder ne" value="NE"></input>';
}
newHTML = newHTML + '<div class="placeholder spacing"></div></div>'
$('.southLabel').before(newHTML);
newHTML = '<div class="holder">';
for (i = i2*12-5; i <= i2*12; i++) {
newHTML = newHTML + '<div class="placeholder spacing"></div>'
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder sw" value="SW"></input>';
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder se" value="SE"></input>';
}
newHTML = newHTML + '<div class="placeholder spacing"></div></div>'
$('.southLabel').before(newHTML);
newHTML = '<div class="holder">';
for (i = i2*12-6; i >= i2*12-11; i--) {
newHTML = newHTML + '<div class="placeholder spacing">' + i + ':</div>'
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder nw" value="NW"></input>';
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder ne" value="NE"></input>';
}
newHTML = newHTML + '<div class="placeholder spacing"></div></div>'
$('.southLabel').before(newHTML);
newHTML = '<div class="holder">';
for (i = i2*12-6; i >= i2*12-11; i--) {
newHTML = newHTML + '<div class="placeholder spacing"></div>'
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder sw" value="SW"></input>';
newHTML = newHTML + '<input type="button" data-section=' + i + ' class="location placeholder se" value="SE"></input>';
}
newHTML = newHTML + '<div class="placeholder spacing"></div></div>'
$('.southLabel').before(newHTML);
newHTML = '<div class="holder"><div class="placeholder spacing"></div></div>';
$('.southLabel').before(newHTML);
}
//When the form is loaded, cycle through all properties and populate
//the highlighting for the different sections
$('.location').each(function() {
var nwVal = parseInt($('#Field1\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the NW field in the table
var neVal = parseInt($('#Field2\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the NE field in the table
var swVal = parseInt($('#Field5\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the SW field in the table
var seVal = parseInt($('#Field6\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the SE field in the table
if ($(this).val() == 'NW') {
if (nwVal == 1) {
$(this).addClass('north');
}
else if (nwVal == 2) {
$(this).addClass('west');
}
else if (nwVal == 3) {
$(this).addClass('north');
$(this).addClass('west');
}
$('#Field1\\(' + $(this).data('section') + '\\)').val(nwVal); //Be sure to set the correct Field # (the Q # for the NW field in the table
}
else if ($(this).val() == 'NE') {
if (neVal == 1) {
$(this).addClass('north');
}
else if (neVal == 2) {
$(this).addClass('east');
}
else if (neVal == 3) {
$(this).addClass('north');
$(this).addClass('east');
}
$('#Field2\\(' + $(this).data('section') + '\\)').val(neVal); //Be sure to set the correct Field # (the Q # for the NE field in the table
}
else if ($(this).val() == 'SW') {
if (swVal == 1) {
$(this).addClass('south');
}
else if (swVal == 2) {
$(this).addClass('west');
}
else if (swVal == 3) {
$(this).addClass('south');
$(this).addClass('west');
}
$('#Field5\\(' + $(this).data('section') + '\\)').val(swVal); //Be sure to set the correct Field # (the Q # for the SW field in the table
}
else if ($(this).val() == 'SE') {
if (seVal == 1) {
$(this).addClass('south');
}
else if (seVal == 2) {
$(this).addClass('east');
}
else if (seVal == 3) {
$(this).addClass('south');
$(this).addClass('east');
}
$('#Field6\\(' + $(this).data('section') + '\\)').val(seVal); //Be sure to set the correct Field # (the Q # for the SE field in the table
}
});
//When a button is clicked, update the stored value for it (0, 1, 2, or 3)
//And populate the highlighting for the button.
$('.location').click(function(){
var nwVal = parseInt($('#Field1\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the NW field in the table
var neVal = parseInt($('#Field2\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the NE field in the table
var swVal = parseInt($('#Field5\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the SW field in the table
var seVal = parseInt($('#Field6\\(' + $(this).data('section') + '\\)').val()); //Be sure to set the correct Field # (the Q # for the SE field in the table
if ($(this).val() == 'NW') {
if (nwVal == 0) {
nwVal = 1;
$(this).addClass('north');
$(this).removeClass('west');
}
else if (nwVal == 1) {
nwVal = 2;
$(this).removeClass('north');
$(this).addClass('west');
}
else if (nwVal == 2) {
nwVal = 3;
$(this).addClass('north');
$(this).addClass('west');
}
else if (nwVal == 3) {
nwVal = 0;
$(this).removeClass('north');
$(this).removeClass('west');
}
$('#Field1\\(' + $(this).data('section') + '\\)').val(nwVal); //Be sure to set the correct Field # (the Q # for the NW field in the table
}
else if ($(this).val() == 'NE') {
if (neVal == 0) {
neVal = 1;
$(this).addClass('north');
$(this).removeClass('east');
}
else if (neVal == 1) {
neVal = 2;
$(this).removeClass('north');
$(this).addClass('east');
}
else if (neVal == 2) {
neVal = 3;
$(this).addClass('north');
$(this).addClass('east');
}
else if (neVal == 3) {
neVal = 0;
$(this).removeClass('north');
$(this).removeClass('east');
}
$('#Field2\\(' + $(this).data('section') + '\\)').val(neVal); //Be sure to set the correct Field # (the Q # for the NE field in the table
}
else if ($(this).val() == 'SW') {
if (swVal == 0) {
swVal = 1;
$(this).addClass('south');
$(this).removeClass('west');
}
else if (swVal == 1) {
swVal = 2;
$(this).removeClass('south');
$(this).addClass('west');
}
else if (swVal == 2) {
swVal = 3;
$(this).addClass('south');
$(this).addClass('west');
}
else if (swVal == 3) {
swVal = 0;
$(this).removeClass('south');
$(this).removeClass('west');
}
$('#Field5\\(' + $(this).data('section') + '\\)').val(swVal); //Be sure to set the correct Field # (the Q # for the SW field in the table
}
else if ($(this).val() == 'SE') {
if (seVal == 0) {
seVal = 1;
$(this).addClass('south');
$(this).removeClass('east');
}
else if (seVal == 1) {
seVal = 2;
$(this).removeClass('south');
$(this).addClass('east');
}
else if (seVal == 2) {
seVal = 3;
$(this).addClass('south');
$(this).addClass('east');
}
else if (seVal == 3) {
seVal = 0;
$(this).removeClass('south');
$(this).removeClass('east');
}
$('#Field6\\(' + $(this).data('section') + '\\)').val(seVal); //Be sure to set the correct Field # (the Q # for the SE field in the table
}
});
});
6. Update the Javascript to reference the table fields. In my case, the NW field was q1 (so there are 4 locations that refer to Field1), the NE field was q2 (so there are 4 locations that refer to Field2), the SW field was q5 (so there are 4 locations that refer to Field5), the SE field was q6 (so there are 4 locations that refer to Field6). You will need to update the 16 field numbers in the Javscript.
Each time you click on one of the buttons, the stored value alternates between 0 (shows no highlights), 1 (shows the top or bottom highlighted), 2 (shows the left or right highlighted), and 3 (shows both the top/bottom and left/right highlighted). So the user just clicks on the button and the highlighting cycles through. Because the number value is stored in the table, the selection carries over across the submitted form.
I have tested this going from a submitted form to a user task and the values carried over.
I have not tested this with the form archived to the repository - and I suspect that it will not complete the highlighting there. It will probably still generate the buttons, etc. - but the highlighting is dependent upon the val() of the fields in the table (to get the 0, 1, 2, or 3), and val() is not used in the archived version of the form. If you need it to work on the archive version too, then you would need to tweak it to also check the text() item in addition to the val() item.
Here's a screenshot of my completed form:

I hope this is of some help to you!