Using the Guest Entries plugin, how can I allow people to edit/delete? I have a form for people offering or requesting to share-a-lift to an event.
I'm using the Guest Entries plugin. 

But I need them to be able to edit and delete those entries, as once a pair are matched up they need removing from the list of offers/requests to avoid multiple offers.

I have a page with the list of the lifts on offer or requested and have a link from each of the entries to the form page but with the entryId as segment 2.

How do I code the Delete button? (turns out you can't)

I appreciate that this is not the most secure way of doing things, but the client has been using a similar form/method on their old site and have not had any fraudulent or malicious issues in many years.
If anyone can suggest a more secure method without any logins or registration I'm open to ideas.

The final solution

As you can't delete or edit Guest Entries @carlcs came up with the idea of allowing a second entry (in another entry type) with a common field to the first.

In the template listing all the offers and requests you look for entries from both entry types with a matching field, and if a match is found don't show either. See the code in his answer for the details.
What you could try is to use the Preparse plugin and add a field to your entry type that automatically generates a secret key for each submitted entry.

Show the user this key on the page they are redirected to upon form submission, tell them to write it down.

You now set up a new guest entry form to submit matches. So instead of deleting entries, the user enters his personal secret key into a field to submit a new entry (I'd suggest to post to the same channel but different entry type).

On the front-end you can now list only those requests/offers entries that do not have a matching "delete" entry yet. Another advantage over your delete approach is that you have a nice record and overview in the CP of what was offered and when.

Code example:

There's no template function to generate a random string, but you could apply Craft's shuffle function on an array of characters.

{%- set chars = '012345678901234567890123456789'|split('') %}
{%- set key = shuffle(chars)|join %}

{{- key|slice(0, 6) }}


That's how you could generate the secret keys within the Preparse field. And to loop through your "requests" and only show them if there's no matching "response" entry yet, do something like this.

{% set requests = craft.entries({
    section: 'lifts',
    type: 'requests',
    limit: null,
}) %}

{# 
 # Loop through all "requests". Check for each of them if there's a
 # matching "response" before outputting.
 #}
{% for request in requests %}

    {#
     # Try to get an entry of entry type "responses" where the "secretKey"
     # field value matches the "secretKey" of the "request" in the current
     # itteration of this "requests" loop (returns an EntryModel or NULL).
     #}
    {% set hasResponse = craft.entries({
        section: 'lifts',
        type: 'responses',
        secretKey: request.secretKey,
    }).first() %}

    {#
     # Only output if "hasResponse" is not NULL
     #}
    {% if not hasResponse %}
        {{ request.message }}
    {% endif %}
{% endfor %}