I've been tinkering with this for a bit and though I'm unsure if it can be done using a single app, I have found a way to make it possible using a series of chained apps so that after App 1 executes, the others are executed in sequence.
App 1 is a basic filter. Using a "Contain" expression, it filters out the fruits based on whether that column contains the string entered via the textbox. This will work for plural and singular variants (i.e. Apples vs. Apple), then outputs both the filtered version of the initial flow (App1output.yxdb) and a document for App 2's listbox (Fruit list.yxdb).
App2 gives the user then the option to choose which of the available fruit values they want to use from a listbox. More than one may be selected if the option is available. This then outputs a newly filtered version of App1output.yxdb (App2output.yxdb)
App 3 then takes App2Output.yxdb and goes through the same process of App 1 by allowing the user to enter a color and then outputting 2 separate files. The first being the newly filtered App2Output that accounts for both the filtered color and the fruit (App3output.yxdb) and the listbox items for app 4 (color list.yxdb).
Finally, app 4 mimics app 2 by allowing the user to select from the available color options what they want to narrow their filter down to, and finally output the results of all actions up to this point.
Obviously there is a lot of room where this could be improved (for example creating error messages if a color or fruit entered via a text box does not exist within the dataset) but I hope this helps get you a little closer to your desired outcome :) I apologize I couldn't help more using a singular app.